[英]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.