在安卓中设置按钮的点击效果

3

我是Android应用程序开发的新手,我意识到,归根结底,对最终用户真正重要的是应用程序的UI界面。

当涉及到UI界面时,我总是尽力而为,但我总是遇到一些问题。特别是,我经常遇到的主要问题之一,就是当我为某个按钮设置自定义背景颜色或图像时,点击效果会消失。所以,当你点击这个按钮时,虽然它显然会起作用,但在视觉上看起来并不美观。

我想知道是否有办法恢复原始的点击效果,或者以编程方式自己设置一些点击效果。

提前致谢。

4个回答

6
将此保存为可绘制对象并设置为背景:
<?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>

这只是一个简单的例子。你可以自己创建更复杂的。


你的意思是当我点击按钮时将其设置为背景吗?如果是这样,那么这就像一个过滤器,对吗? - Miquel Perez
在按钮被点击之前,将其设置为背景。然后你会看到效果。属性state_pressed用于控制在按住按钮时按钮的颜色。当你松开手指后,它会恢复为通常的颜色。 - Piyush
我明白了,感谢您的解释!无论如何,它部分地满足了我的需求。因为如果我将图像设置为背景,我想设置一个滤镜而不仅仅是改变颜色。这可能吗?谢谢! - Miquel Perez
可以的。很多事情都可以实现!你可以更改背景图片,甚至可以对其进行动画处理。你只需要不断尝试实验。尽可能使用更多的属性。 - Piyush

5

假设你有一个按钮或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...
                }
            });

非常感谢!请查看我的答案,以查看基于您的解决方案的最终解决方案! - Miquel Perez

1
感谢Amir Horev的回答,我找到了我真正需要的东西。我基于他的答案来解决问题,但是我使用setColorFilter()方法而不是调用setBackgroundColor()方法,从视图的背景中触发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);,这样我就可以调用这个函数而不必为每个按钮编写所有的先前代码。现在我需要确保任何时候都不会按下超过一个按钮。

0

我建议您通过编程设置颜色或图像。您可以使用以下方法:

Button button = (Button)findViewById(R.id.myButton);
button.setImageSource(R.drawable.image);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接