按下时如何使按钮变大? (安卓工作室)

Posted

技术标签:

【中文标题】按下时如何使按钮变大? (安卓工作室)【英文标题】:How to make a button bigger when pressed? (Android Studios) 【发布时间】:2018-01-08 11:57:26 【问题描述】:

我正在 android 工作室开发一个应用程序,我希望我的自定义按钮在按下时变大,并在释放时返回到默认定义状态。我写了一个 xml 文件来定义我的按钮,但它没有用。这是我的自定义按钮的 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/play_button_pressedhdpi"
        android:state_pressed="true" />
    <item android:drawable="@drawable/play_button_defaulthdpi"
        android:state_focused="true" />
    <item android:drawable="@drawable/play_button_defaulthdpi" />
</selector>

这似乎不起作用。任何帮助将不胜感激。

编辑:

我刚刚尝试了下面第一个答案中提到的以下代码:

button1.setOnTouchListener(new View.OnTouchListener() 
        @Override
        public boolean onTouch(View v, MotionEvent event) 

            RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) v.getLayoutParams();
            if (event.getAction() == MotionEvent.ACTION_DOWN)
            
                //sendMessage("Key1\n");
                lp.width = 200;
                lp.height = 200;
                button1.setLayoutParams(lp);
            

            if(event.getAction() == MotionEvent.ACTION_UP) 
                lp.width=90;
                lp.height=90;
                button1.setLayoutParams(lp);
            
            return false;
        
    );

这是有道理的,但由于某种原因不起作用。

任何帮助将不胜感激......

【问题讨论】:

您可以在按钮上单击并调整按钮 button.getLayoutParams().height = newHeight 和 button.getLayoutParams().width = newWidth 【参考方案1】:

我终于能够解决这个问题。我创建了两个不同大小的单独图像,并使用 setOnTouchListener() 以下列方式为ACTION_DOWNACTION_UP 的每个状态的按钮分配适当的图像:

button1.setOnTouchListener(new View.OnTouchListener() 
        @Override
        public boolean onTouch(View v, MotionEvent event) 
            if (event.getAction() == MotionEvent.ACTION_DOWN)
            
                float x = (float) 1.25;
                float y = (float) 1.25;

                button1.setScaleX(x);
                button1.setScaleY(y);
                button1.setBackgroundResource(R.drawable.blue_220);

                return true;
            

            else if(event.getAction() == MotionEvent.ACTION_UP)
            
                float x = 1;
                float y = 1;

                button1.setScaleX(x);
                button1.setScaleY(y);
                button1.setBackgroundResource(R.drawable.blue_206);

            
            return false;
        
    );

根据需要得到结果。

【讨论】:

【参考方案2】:

我以这种方式使用 MotiovEvent 来调整按钮的大小:

button.setOnTouchListener(new View.OnTouchListener() 
@Override
public boolean onTouch(View v, MotionEvent event) 
    RelativeLayout.LayoutParams lp = (LayoutParams) b.getLayoutParams();
    if(event.getAction() == MotionEvent.ACTION_DOWN) 
        sendMessage("key1\n");
        lp.width=140;
        lp.height=140;
        button.setLayoutParams(lp);
    
    if(event.getAction() == MotionEvent.ACTION_UP) 
        lp.width=90;
        lp.height=90;
        button.setLayoutParams(lp);
    
    return false;
    
);

希望对你有帮助。

【讨论】:

您好,我尝试了您的解决方案,但对我不起作用。当我按下按钮时,应用程序停止工作并崩溃。有什么解决办法吗?另外,代码中b.getLayoutParams() 按钮中的sendMessage()b 是什么? 是的,我从我的项目中复制了它,对不起,只使用你需要调整大小的按钮,如果应用程序再次崩溃,我需要日志来了解问题。 日志没有说太多,代码中没有错误,但是当我按下上面有onTouchListener()的按钮时,应用程序崩溃了。我是否需要导入任何包才能使用onTouchListener()

以上是关于按下时如何使按钮变大? (安卓工作室)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用背景颜色设置圆形按钮并在按下时更改颜色

按下时使按钮填充 UITableView

使 Pyqt 按钮在鼠标按下而不是鼠标按下时运行功能

按下时如何使 UIButton 收缩为 UIActivityIndi​​cator?

使 matplotlib 按钮小部件在按下时启动,而不是在释放时启动

当我们滑过它时如何使按钮执行? (在安卓工作室)