簡體   English   中英

在Android中設置按鈕點擊效果

[英]Set button click effect in Android

我是Android應用程序開發的新手,后來我意識到,最終,真正對最終用戶重要的是應用程序的UI。

當涉及到UI時,我總是盡力而為,但是我總是遇到一些麻煩。 特別是,我經常遇到的主要問題之一(但我不知道如何解決)是,當我將自定義背景色或圖像設置為某個按鈕時,單擊效果消失了。 因此,您單擊了該按鈕,盡管它顯然可以工作,但是看到它如何以圖形方式不起作用是非常不愉快的。

我想知道是否有某種方法可以恢復原始效果,或者自己以編程方式設置一些點擊效果。

提前致謝。

假設您有一個按鈕或一個TextView或任何其他視圖。 並且您希望它在觸摸事件期間更改其顏色,並且還希望在單擊后執行一些操作:

 button.setOnTouchListener(new View.OnTouchListener() 
              {
                @Override
                public boolean onTouch(View v, MotionEvent event) 
                {



                  if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE)
                     {
                        v.setBackgroundColor(Color.parseColor("#000000"));
                     }

                if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL)
                      {
                          v.setBackgroundColor(Color.parseColor("#ffffff"));
                      }


                    return false;
                }
            });

然后添加點擊監聽器:

button .setOnClickListener(new View.OnClickListener()
{
   @Override
   public void onClick(View v) 
                {                   
                     do some stuff...
                }
            });

將其保存為可繪制對象並設置為背景:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
    <shape android:shape="rectangle">
        <solid android:color="#212121"/>
        <corners android:radius="5dp"/>
        </shape>
    </item>

    <item>
        <shape android:shape="rectangle">
            <solid android:color="#424242"/>
            <corners android:radius="5dp"/>
        </shape>
    </item>
</selector>

這只是一個簡單的例子。 您可以自己創建更復雜的代碼。

多虧了Amir Horev的回答,我才知道我真正需要的是什么。 我根據他的答案給出解決方案,但沒有調用setBackgroundColor()方法,而是從視圖背景中使用setColorFilter()來觸發ACTION_DOWN和ACTION_UP事件。 所以現在我基本上可以將濾色器設置為任何按鈕。 這是代碼最終的樣子:

button.setOnTouchListener(new View.OnTouchListener()
        {
            @Override
            public boolean onTouch(View v, MotionEvent event)
            {



                if (event.getAction() == MotionEvent.ACTION_DOWN)
                {
                   v.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFFAA0000));

                }

                if (event.getAction() == MotionEvent.ACTION_UP)
                {

                    v.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 000000000));

                }


                return false;
            }
        });

我還編寫了一個函數,例如public void triggerActionDownEvent(Button button); 因此我可以調用此函數,而不用為每個按鈕編寫所有先前的代碼。 現在,我必須確保在任何時候都只按下一個按鈕。

我建議您以編程方式設置顏色或圖像。 您可以使用:

Button button = (Button)findViewById(R.id.myButton);
button.setImageSource(R.drawable.image);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM