我是Android应用开发的新手,我意识到,最终用户真正关心的是App的用户界面。
在UI方面,我总是尽力做到最好,但我总是遇到一些麻烦。 特别是,我一直有的主要问题之一,我不知道如何修复,当我将自定义背景颜色或图像设置为某个按钮时,点击效果消失。所以你点击按钮虽然它显然有用,但看到它如何以图形方式起作用是非常不愉快的。
我想知道是否有某种方式可以恢复原始效果,或者以编程方式自行设置点击效果。
提前致谢。
答案 0 :(得分:3)
假设您有按钮或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...
}
});
答案 1 :(得分:2)
将此保存为drawable并设置为背景:
<?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>
这只是一个简单的例子。你可以自己创建更复杂的。
答案 2 :(得分:0)
感谢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);
这样的函数,所以我可以调用这个函数,而不是为每个按钮编写所有以前的代码。现在我必须确保在任何时候按下不超过一个按钮。
答案 3 :(得分:0)
我建议您以编程方式设置颜色或图像。您可以使用:
Button button = (Button)findViewById(R.id.myButton);
button.setImageSource(R.drawable.image);