在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);