在Android中设置按钮单击效果

时间:2016-02-14 21:56:52

标签: android button click effect

我是Android应用开发的新手,我意识到,最终用户真正关心的是App的用户界面。

在UI方面,我总是尽力做到最好,但我总是遇到一些麻烦。 特别是,我一直有的主要问题之一,我不知道如何修复,当我将自定义背景颜色或图像设置为某个按钮时,点击效果消失。所以你点击按钮虽然它显然有用,但看到它如何以图形方式起作用是非常不愉快的。

我想知道是否有某种方式可以恢复原始效果,或者以编程方式自行设置点击效果。

提前致谢。

4 个答案:

答案 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);