在Android中设置按钮点击效果
Set button click effect in Android
我是 Android 应用程序开发的新手,我意识到,归根结底,对最终用户来说真正重要的是应用程序的 UI。
在 UI 方面,我总是尽力而为,但我总是遇到一些麻烦。
特别是,我一直遇到且不知道如何解决的主要问题之一是,当我为某个按钮设置自定义背景颜色或图像时,点击效果消失了。所以你点击按钮,虽然它显然有效,但看到它在图形上什么也没做是非常不愉快的。
我想知道是否有什么方法可以恢复原来的效果,或者自己通过编程设置一些点击效果。
提前致谢。
将其保存为可绘制对象并设置为背景:
<?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>
这只是一个简单的例子。您可以自己创建更复杂的。
假设您有一个按钮或一个 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...
}
});
多亏了 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);
我是 Android 应用程序开发的新手,我意识到,归根结底,对最终用户来说真正重要的是应用程序的 UI。
在 UI 方面,我总是尽力而为,但我总是遇到一些麻烦。 特别是,我一直遇到且不知道如何解决的主要问题之一是,当我为某个按钮设置自定义背景颜色或图像时,点击效果消失了。所以你点击按钮,虽然它显然有效,但看到它在图形上什么也没做是非常不愉快的。
我想知道是否有什么方法可以恢复原来的效果,或者自己通过编程设置一些点击效果。
提前致谢。
将其保存为可绘制对象并设置为背景:
<?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>
这只是一个简单的例子。您可以自己创建更复杂的。
假设您有一个按钮或一个 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...
}
});
多亏了 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);