অ্যান্ড্রয়েডে কীভাবে বোতাম ক্লিক প্রভাব সেট করবেন?


105

অ্যান্ড্রয়েডে, আমি যখন বাটনে ব্যাকগ্রাউন্ড চিত্র সেট করি তখন আমি বোতামটিতে কোনও প্রভাব দেখতে পাই না।

বোতামটিতে আমার কিছু প্রভাব প্রয়োজন যাতে ব্যবহারকারীরা বুঝতে পারবেন যে বোতামটি ক্লিক করা হয়েছে।

ক্লিক করার সময় কয়েক সেকেন্ডের সময় বাটনটি অন্ধকার হওয়া উচিত, তবে এর জন্য আমি কী করব?

ধন্যবাদ।



: নিম্নলিখিত পদ্ধতি তাদের টেক্সট নির্বিশেষে, আপনি আপনার সমস্ত বোতাম ত্বক একটি একক styleclass ব্যবহার করার অনুমতি দেয় stackoverflow.com/questions/5327553/...
জ্যাক Marrapese

না আমি ইমেজ বাটন ব্যবহার করছি না, আমি এর জন্য কোন সাধারণ বাটন ব্যবহার করছি?
জিগনেশ আনসোদারিয়া

3
এটির খুব সুন্দর টিউটোরিয়াল: dibbus.com/2011/02/gradient-buttons- for
প্রতীক

উত্তর:


154

বোতামের জন্য রাজ্যের তালিকা সম্বলিত একটি অঙ্কনযোগ্য এক্সএমএল ফাইল তৈরি করে এটি অর্জন করা যেতে পারে। সুতরাং উদাহরণস্বরূপ, যদি আপনি নিম্নলিখিত কোড সহ "বাটন.এক্সএমএল" নামে একটি নতুন এক্সএমএল ফাইল তৈরি করেন:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/YOURIMAGE" />
    <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/gradient" />
    <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/gradient" />
    <item android:drawable="@drawable/YOURIMAGE" />
</selector>

টিপে অন্ধকার চেহারার সাথে পটভূমি চিত্রটি রাখতে, একটি দ্বিতীয় এক্সএমএল ফাইল তৈরি করুন এবং নিম্নলিখিত কোডের সাথে গ্রেডিয়েন্ট.এক্সএমএল কল করুন:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <bitmap android:src="@drawable/YOURIMAGE"/>
    </item>
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android">
            <gradient android:angle="90" android:startColor="#880f0f10" android:centerColor="#880d0d0f" android:endColor="#885d5d5e"/>
        </shape>
    </item>
</layer-list>

আপনার বোতামের এক্সএমএলে ব্যাকগ্রাউন্ডটি বোতামের এক্সএমএল হিসাবে সেট করুন

android:background="@drawable/button"

আশাকরি এটা সাহায্য করবে!

সম্পাদনা করুন: ব্লক রঙের বিপরীতে বোতামে একটি চিত্র (YOURIMAGE) দেখানোর জন্য উপরের কোডটি পরিবর্তন করা হয়েছে।


তারপরে আমি বাটন ব্যাকগ্রাউন্ডের জন্য চিত্রটি কোথায় সেট করতে পারি, চিত্রটি সেট করতে অবশ্যই আবশ্যক
জিগনেশ আনসোদারিয়া

1
রাষ্ট্রের এক্সএমএল সহ একটি পটভূমি চিত্র কীভাবে ব্যবহার করতে হয় তা দেখানোর জন্য সম্পাদিত। আপনার অঙ্কনযোগ্য ডিরেক্টরিতে ইমেজ রিসোর্সটি দিয়ে YOURIMAGE প্রতিস্থাপন করুন।
Ljdawson

বোতামের এসসিআরটি আয়তক্ষেত্রাকার হলে এটি কেবল কাজ করে। যদি এসআরসি অঙ্কনযোগ্য এর চেয়ে আলাদা কোনও আকার থাকে তবে গ্রেডিয়েন্টটি ব্যাকগ্রাউন্ডেও প্রয়োগ করা হবে এবং এটি দুঃখজনক।
রেনাটো লোকেটি

সত্যিই নয়, লেয়ার তালিকায় সর্বদা আলাদা আকার ব্যবহার করতে পারে
লজডসন

2
আমি যখন একটি চিত্র ব্যবহার করছি তখন এটি আমার জন্য কাজ করে .. তবে যখন আমি এক্সএমএল ব্যাকগ্রাউন্ড ব্যবহার করি। এটি কাজ করছে না ...
DKV

88

আপনার যখন অনেকগুলি চিত্রের বোতাম থাকে তখন এটি সহজ হয় এবং আপনি প্রতিটি বোতামের জন্য xML-s লিখতে চান না।

কোটলিন সংস্করণ:

fun buttonEffect(button: View) {
    button.setOnTouchListener { v, event ->
        when (event.action) {
            MotionEvent.ACTION_DOWN -> {
                v.background.setColorFilter(-0x1f0b8adf, PorterDuff.Mode.SRC_ATOP)
                v.invalidate()
            }
            MotionEvent.ACTION_UP -> {
                v.background.clearColorFilter()
                v.invalidate()
            }
        }
        false
    }
}

জাভা সংস্করণ:

public static void buttonEffect(View button){
    button.setOnTouchListener(new OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN: {
                    v.getBackground().setColorFilter(0xe0f47521,PorterDuff.Mode.SRC_ATOP);
                    v.invalidate();
                    break;
                }
                case MotionEvent.ACTION_UP: {
                    v.getBackground().clearColorFilter();
                    v.invalidate();
                    break;
                }
            }
            return false;
        }
    });
}

2
আমি এটি আমার কোডটিতে ব্যবহার করি এবং আমি এখনও অবধি একমাত্র সমস্যাটি লক্ষ্য করেছি যে স্ক্রোলভিউতে রাখা অবস্থায় বোতামটি অদ্ভুত আচরণ করে।
Finnboy11

এটি সত্যিই দুর্দান্ত সমাধান এবং
এটির

এটা কিভাবে ভাল? ডিজাইনিং কোডের বাইরে রাখা উচিত, তাই না?
বাগগুলি

এটি এই সমস্যার সহজ সমাধান। যখন আপনার কাছে প্রচুর বোতাম রয়েছে এবং আপনি প্রত্যেকটির জন্য xmls তৈরি করতে চান না তবে এটি সহায়ক হতে পারে।
আন্দ্রে

ঈশ্বর! একটি খণ্ডে 5 টি বোতাম রয়েছে তা কল্পনা করুন ... আপনার কাছে এই বয়লারপ্লেট কোডের পুরো গোছা থাকবে ... কীভাবে এটি পুনরায় চুলক করবেন? সমস্ত ক্রিয়াকলাপে সমস্ত বোতামের জন্য রঙিন ফিল্টার পরিবর্তন করবেন? ইমো এটি আপনার পরবর্তী বিকাশকারী এত খুশি হবেন না ..
লিও ড্রয়েডকোডার

84

আপনার AlphaAnimationঅবজেক্টটি তৈরি করুন যা বোতামটির বিবর্ণ প্রভাব কত হবে তা স্থির করে, তারপরে এটি onClickListenerআপনার বোতামগুলির মধ্যে শুরু করতে দিন

উদাহরণ স্বরূপ :

private AlphaAnimation buttonClick = new AlphaAnimation(1F, 0.8F);

// some code

public void onClick(View v) {
    v.startAnimation(buttonClick);
}

অবশ্যই এটি একটি উপায়, সর্বাধিক পছন্দসই নয়, এটি আরও সহজ


5
এই সমাধানটি সম্পর্কে আমি যা পছন্দ করি তা হ'ল এটির জন্য প্রচুর নির্বাচক তৈরি করার দরকার হয় না, যখন আপনার নিজস্ব কাস্টম চিত্রগুলির সাথে প্রত্যেকের কাছে অনেকগুলি বোতাম থাকে।
পিট

2
এটি কোনও টাচ ডাউনের বোতামটি বিবর্ণ করে না, ক্লিকটি সনাক্ত হওয়ার পরে ব্যবহারকারীর আঙুলটি ইতিমধ্যে উপরে নিয়ে যাওয়ার পরে এটি কেবল দ্বিতীয় বিভক্ত হয়ে যায়।
ডগ ভোস

1
দুর্দান্ত এবং সহজ

@ ডাওগ ভাস, এনিমেশনটি দীর্ঘায়িত করার জন্য আপনি সময়কাল নির্ধারণ করতে পারেন
আহমেদ আদেল ইসমাইল

অন ​​লং ক্লিক এবং 'সার্কুলারআরওয়াল' সম্পর্কে কী?
আকাও পিট্তা

44

ক্লিকযোগ্যযোগ্য প্রভাব অর্জনের জন্য আপনি কেবল অগ্রভাগ ব্যবহার করতে পারেনView :

android:foreground="?android:attr/selectableItemBackground"


অন্ধকার থিম সঙ্গে ব্যবহারের জন্য যোগ থিম আপনার layout(যোগ্য মর্মে স্পষ্ট করা):

android:theme="@android:style/ThemeOverlay.Material.Dark"

5
কার্যকর করার সবচেয়ে সহজ উপায়। অবগতির জন্য, অ্যাট্রিবিউট android: ফোরগ্রাউন্ড API লেভেলের উপর কোনো প্রভাব নেই চেয়ে 23 কমে
dolgom

1
সহজ সমাধান।
জেরি চং

2
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, যা খুব সহজ এবং এটি চমৎকার রিপল অ্যানিমেশন প্রভাব যুক্ত করে।
টাইলার

1
@ ডলগম এপিআই স্তরের জন্য <23 "ব্যাকগ্রাউন্ড" বৈশিষ্ট্যে এটি ব্যবহার করুন o সুতরাং: অ্যান্ড্রয়েড: ব্যাকগ্রাউন্ড = "? অ্যান্ড্রয়েড:
অ্যাটর

24

আপনার আইটেমটিকে সিস্টেমের সাথে সামঞ্জস্যপূর্ণ করতে আপনার android:attr/selectableItemBackgroundপছন্দসই দৃশ্যের ব্যাকগ্রাউন্ড বা ফোরগ্রাউন্ড ট্যাগটিতে সিস্টেমের বৈশিষ্ট্যটি উল্লেখ করার চেষ্টা করুন feel

<ImageView
    ...
    android:background="?android:attr/selectableItemBackground"      
    android:foreground="?android:attr/selectableItemBackground"
    ...
/>

যথাক্রমে API স্তরের 23 এর আগে / পরে পছন্দসই প্রভাব পেতে উভয় বৈশিষ্ট্য ব্যবহার করুন Use

https://stackoverflow.com/a/11513474/4683601


2
এখনও পর্যন্ত সহজ সমাধান। ধন্যবাদ!
tykom

9

অথবা শুধুমাত্র একটি ব্যাকগ্রাউন্ড চিত্র ব্যবহার করে আপনি ক্লিকের প্রভাবটি ব্যবহার করতে পারেন setOnTouchListener

দুইটি রাস্তা

((Button)findViewById(R.id.testBth)).setOnTouchListener(new OnTouchListener() {

      @Override
        public boolean onTouch(View v, MotionEvent event) {
          switch (event.getAction()) {
              case MotionEvent.ACTION_DOWN: {
                  Button view = (Button) v;
                  view.getBackground().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP);
                  v.invalidate();
                  break;
              }
              case MotionEvent.ACTION_UP:
                  // Your action here on button click
              case MotionEvent.ACTION_CANCEL: {
                  Button view = (Button) v;
                  view.getBackground().clearColorFilter();
                  view.invalidate();
                  break;
              }
          }
          return true;
        }
});

এখানে চিত্র বর্ণনা লিখুন

এবং আপনি যদি ব্যবহার করতে না চান setOnTouchListerতবে এটি অর্জনের আর একটি উপায়

    myButton.getBackground().setColorFilter(.setColorFilter(0xF00, Mode.MULTIPLY);

    StateListDrawable listDrawable = new StateListDrawable();
    listDrawable.addState(new int[] {android.R.attr.state_pressed}, drawablePressed);
    listDrawable.addState(new int[] {android.R.attr.defaultValue}, myButton);

    myButton.setBackgroundDrawable(listDrawable);

২ য় ভাবে কোডে ত্রুটি রয়েছে। গেটকন্টেন্ট () ফাংশন কী? এছাড়াও মাই বাটন কোনও অঙ্কনযোগ্য নয় তাই এটি রাষ্ট্র হিসাবে যুক্ত করা যায় না।
এহতেশাম হাসান

ত্রুটি চিহ্নিত করার জন্য ধন্যবাদ। আমি এটি সংশোধন করেছি, এবং মাইবাটনটি বাটন ক্লাসের একটি উদাহরণ যা পদ্ধতি সেটব্যাকগ্রাউন্ডড্র্যাবেবল সরবরাহ করে এবং এটি ড্রয়যোগ্য উদাহরণগুলি গ্রহণ করে, তাই এটি কাজ করবে।
বিনয়াক বেভিনাকট্টি

আমার উত্তর যা আপনার 2 য় পদ্ধতির উপর ভিত্তি করে দেখুন। stackoverflow.com/a/39430738/5229515
এহতেশাম হাসান

এটির শেষে সম্ভবত "রিটার্ন মিথ্যা" থাকা উচিত যাতে এটি ইভেন্টটি গ্রাস করে না এবং কোনও অতিরিক্ত অন ক্লিকলিস্টনারকে ডাকা যেতে পারে।
ডগ ভোস

3

এটি করার জন্য আর একটি সহজ উপায় যুক্ত করতে চান: যদি আপনার ইমেজবটনটি এর পটভূমি থেকে যায় এবং আপনি এটি বাতিল করে না রাখেন তবে এটি একটি সাধারণ বোতামের মতো কাজ করবে এবং অন্যান্য বোতামের মতো ঠিক ক্লিক করার সময় ক্লিক অ্যানিমেশনটি প্রদর্শন করবে hide পটভূমি এটি এখনও আছে:

<ImageButton
    android:id="@+id/imageButton2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingBottom="1dp"
    android:paddingLeft="1dp"
    android:paddingRight="1dp"
    android:paddingTop="1dp"
    android:src="@drawable/squareicon" />

প্যাডিংগুলি পটভূমিটি দৃশ্যমান হতে দেয় না এবং বোতামটি অন্যান্য বোতামের মতো কাজ করতে দেয়।


1
এটি বৃত্তাকার হলে চিত্রের চারপাশে স্কোয়ার বোতামের সীমানা
বজায় রাখবে

3

এটিই সেরা সমাধান যা আমি বিনায়কের উত্তর থেকে ইঙ্গিত নিয়ে এসেছি। অন্যান্য সমস্ত সমাধানের বিভিন্ন ত্রুটি রয়েছে।

সবার আগে এটির মতো একটি ফাংশন তৈরি করুন।

void addClickEffect(View view)
{
    Drawable drawableNormal = view.getBackground();

    Drawable drawablePressed = view.getBackground().getConstantState().newDrawable();
    drawablePressed.mutate();
    drawablePressed.setColorFilter(Color.argb(50, 0, 0, 0), PorterDuff.Mode.SRC_ATOP);

    StateListDrawable listDrawable = new StateListDrawable();
    listDrawable.addState(new int[] {android.R.attr.state_pressed}, drawablePressed);
    listDrawable.addState(new int[] {}, drawableNormal);
    view.setBackground(listDrawable);
}

ব্যাখ্যা:

getConstantState ()। new অঙ্কনযোগ্য () বিদ্যমান অঙ্কনযোগ্যকে ক্লোন করতে ব্যবহৃত হয় অন্যথায় একই অঙ্কনযোগ্য ব্যবহার করা হবে। এখান থেকে আরও পড়ুন: অ্যান্ড্রয়েড: ফিল্টারগুলি সহ একটি স্টেটলিস্টড্র্যায়েবল করার জন্য একটি অঙ্কনযোগ্য ক্লোনিং

মুচলেকা () অঙ্কনযোগ্য ক্লোনটিকে তার রাজ্যের ভাগযোগ্য না হওয়ার অন্যান্য উদাহরণগুলির সাথে ভাগ করে নেওয়ার জন্য ব্যবহৃত হয়। এটি সম্পর্কে এখানে আরও পড়ুন: https://developer.android.com/references/android/ographicics/drawable/Drawable.html#mutate ()

ব্যবহার:

ফাংশনের প্যারামিটার হিসাবে আপনি যে কোনও ধরণের ভিউ (বাটন, ইমেজবটন, ভিউ ইত্যাদি) পাস করতে পারেন এবং তারা তাদের জন্য ক্লিক এফেক্ট প্রয়োগ করবে।

addClickEffect(myButton);
addClickEffect(myImageButton);

2
Step: set a button in XML with onClick Action:

 <Button
android:id="@+id/btnEditUserInfo"
style="?android:borderlessButtonStyle"
android:layout_width="wrap_content"
android:layout_height="@dimen/txt_height"
android:layout_gravity="center"
android:background="@drawable/round_btn"
android:contentDescription="@string/image_view"
android:onClick="edit_user_info"
android:text="Edit"
android:textColor="#000"
android:textSize="@dimen/login_textSize" />

Step: on button clicked show animation point
//pgrm mark ---- ---- ----- ---- ---- ----- ---- ---- -----  ---- ---- -----

    public void edit_user_info(View view) {

        // show click effect on button pressed
        final AlphaAnimation buttonClick = new AlphaAnimation(1F, 0.8F);
        view.startAnimation(buttonClick);

        Intent intent = new Intent(getApplicationContext(),  EditUserInfo.class);
        startActivity(intent);

    }// end edit_user_info

2

ম্যাটেরিয়াল ডিজাইনের স্থিতি চাপানো / ক্লিক করা প্রভাবের জন্য রিপলড্রেবল ব্যবহার করুন।

এটি অর্জন করার জন্য, রিপল আইটেমটি একটি / এক্সএলএমএল / অঙ্কনযোগ্য ফোল্ডারের আওতায় তৈরি করুন এবং এন্ড্রয়েডে ব্যবহার করুন: যে কোনও দৃষ্টির জন্য পটভূমি।

  • আইকন টিপে / ক্লিক করা, এর জন্য প্রভাব, বৃত্তাকার লম্বাল প্রভাব ব্যবহার করুন, উদাহরণস্বরূপ:

    <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@android:color/darker_gray" />

  • আয়তক্ষেত্রের সীমানা দিয়ে ক্লিক করা দেখার জন্য প্রভাব, আমরা বিদ্যমান অঙ্কনযোগ্য বেলোয়ের মতো লম্বালম্বিটি যুক্ত করতে পারি:

    <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#000000"> <item android:drawable="@drawable/your_background_drawable"/> </ripple>


2

সমস্ত মতামতের জন্য

android:background="?android:attr/selectableItemBackground"

তবে কার্ডভিউয়ের জন্য যা উন্নয়নের ব্যবহার রয়েছে

android:foreground="?android:attr/selectableItemBackground"

সার্কুলার ক্লিক প্রভাবের জন্য যেমন সরঞ্জামদণ্ডে রয়েছে

android:background="?android:attr/actionBarItemBackground"

এছাড়াও আপনি সেট করতে হবে

 android:clickable="true"
 android:focusable="true"

0

অ্যান্ড্রেসের উত্তরে সামান্য সংযোজন:

postDelayedরঙিন ফিল্টারটিকে আরও লক্ষণীয় করে তুলতে আপনি অল্প সময়ের জন্য স্থায়ী করতে ব্যবহার করতে পারেন :

        @Override
        public boolean onTouch(final View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN: {
                    v.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
                    v.invalidate();
                    break;
                }
                case MotionEvent.ACTION_UP: {
                    v.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            v.getBackground().clearColorFilter();
                            v.invalidate();
                        }
                    }, 100L);
                    break;
                }
            }
            return false;
        }

আপনার প্রয়োজন অনুসারে আপনি 100 বিলম্বের মান পরিবর্তন করতে পারেন।


0

আপনি যদি আইএমজির পরিবর্তে এক্সএমএল ব্যাকগ্রাউন্ড ব্যবহার করেন তবে কেবল এটি সরিয়ে দিন:

<item>
    <bitmap android:src="@drawable/YOURIMAGE"/>
</item>

@ লড্ডসন আমাদের যে প্রথম উত্তরটি দিয়েছিল তা থেকে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.