按下时如何使按钮变大? (Android 工作室)
How to make a button bigger when pressed? (Android Studios)
我正在 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;
}
});
这是有道理的,但由于某种原因没有奏效。
如有任何帮助,我们将不胜感激...
我以这种方式使用 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;
}
});
希望对您有所帮助。
我终于能够解决问题了。我创建了两个不同大小的两个单独的图像,并使用 setOnTouchListener() 以下列方式为每个状态 ACTION_DOWN
和 ACTION_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;
}
});
结果如愿。
我正在 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;
}
});
这是有道理的,但由于某种原因没有奏效。
如有任何帮助,我们将不胜感激...
我以这种方式使用 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;
}
});
希望对您有所帮助。
我终于能够解决问题了。我创建了两个不同大小的两个单独的图像,并使用 setOnTouchListener() 以下列方式为每个状态 ACTION_DOWN
和 ACTION_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;
}
});
结果如愿。