【问题标题】:Set button click effect in Android在Android中设置按钮点击效果
【发布时间】:2016-05-25 17:19:13
【问题描述】:

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

在 UI 方面我总是尽力做到最好,但我总是遇到一些麻烦。 特别是,我一直遇到但不知道如何解决的主要问题之一是,当我为某个按钮设置自定义背景颜色或图像时,点击效果消失了。因此,您单击该按钮,虽然它显然可以工作,但看到它在图形上什么都不做是非常令人不快的。

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

提前致谢。

【问题讨论】:

    标签: android button click effect


    【解决方案1】:

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

    【讨论】:

    • 非常感谢!查看我自己对这个问题的回答,看看我基于你的最终解决方案!
    【解决方案2】:

    将此保存为可绘制对象并设置为背景:

    <?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>
    

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

    【讨论】:

    • 您的意思是当我单击按钮时将其设置为背景?如果是这样,那么这就像一个过滤器,对吗?
    • 在单击按钮之前将其设置为背景。然后你会看到效果。属性 state_pressed 用于设置按钮在您按住时的颜色。然后,当您松开手指时,它会再次设置为通常的颜色。
    • 我明白了。感谢您的解释!无论如何,它可以根据我的需要部分工作。因为如果我将图像设置为背景,我想设置一个过滤器而不是改变颜色。那可能吗?谢谢!
    • 是的。可以实现很多!您可以更改背景图像,甚至对其进行动画处理。你只需要继续试验。尝试使用尽可能多的属性。
    【解决方案3】:

    感谢 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); 这样的函数,所以我可以调用这个函数,而不是为每个按钮编写所有以前的代码。现在我必须确保在任何时候按下的按钮都不会超过一个。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-11-02
        • 1970-01-01
        • 2014-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多