Android ImageButton赢了';t改变';背景';按下并释放时
我正在制作一个有按钮的应用程序,当点击按钮时,它会播放声音。我的问题是,当按下并释放mSoundButton时,我找不到改变其背景的方法。我使用的是“背景”而不是“src”,这样我就可以缩小按钮而不必从边缘切割。我还没有添加声音,因为我想在开始添加声音之前解决这个问题 这是我在MainActivity.java中的按钮代码(它工作正常,但不是我想要的方式。按下时会更改背景,但不会释放) 这是我的activity_main.xmlAndroid ImageButton赢了';t改变';背景';按下并释放时,android,android-studio,Android,Android Studio,我正在制作一个有按钮的应用程序,当点击按钮时,它会播放声音。我的问题是,当按下并释放mSoundButton时,我找不到改变其背景的方法。我使用的是“背景”而不是“src”,这样我就可以缩小按钮而不必从边缘切割。我还没有添加声音,因为我想在开始添加声音之前解决这个问题 这是我在MainActivity.java中的按钮代码(它工作正常,但不是我想要的方式。按下时会更改背景,但不会释放) 这是我的activity_main.xml <?xml version="1.0" encoding="
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<ImageView
android:id="@+id/soundButton"
android:layout_width="match_parent"
android:layout_height="70dp"
android:background="@drawable/button_not_clicked"
android:contentDescription="TODO" />
</LinearLayout>
单击mSoundBtn时,它会更改图像并等待1000毫秒(1秒),然后更改回上一个图像,当按下该图像时,它会创建某种动画,以便用户可以理解按下按钮的时间
感谢所有试图提供帮助的人,感谢阅读。:) 您不应该将其定义为“最终的”
样本:
如果我理解正确,您希望在用户从按钮上取下手指后执行操作(意味着按下完成)。 尝试使用OnTouchListener而不是OnClickListener:
imageButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_UP)
{
// change background and other stuff...
return true;
}
return false;
}
});
如果只想在按下按钮时更改按钮的背景,可以使用可绘制的选择器,如下所示:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@color/black" /> <!-- pressed -->
<item android:state_activated="true"
android:drawable="@color/colorAccent" /> <!-- focused -->
<item android:drawable="@color/colorPrimary" /> <!-- default -->
然后把它作为按钮的背景
另一个选项是使用切换按钮和OnChecked侦听器,并在用户检查(按下)按钮时更改背景。如果您希望在第一次切换后永久更改背景,可以通过仅在第一次切换后更改背景来实现此目的。我不能从public开始。上面写着“非法开始表达”。当我删除public时,我无法从内部类访问变量,它会告诉我添加final。很抱歉回答得太晚。您的代码已经解决了从内部类访问的问题,但需要单击两次按钮才能访问它的第一个映像。我希望它在发布之初就变成它的图像。我不知道怎么做。是的,这就是我想要按钮基本上做的,但我也需要按钮被按下时做的。我现在正在试。它可能会解决这个问题。兄弟,我建议你使用下面的背景状态列表,比如@geekybean。它更简单更干净。
public class SampleActivity extends AppCompatActivity {
//Variables
public ImageButton mSoundBtn;
public boolean isSoundBtnSelected = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample);
mSoundBtn = findViewById(R.id.soundButton);
mSoundBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(!isSoundBtnSelected)
mSoundBtn.setBackgroundResource(R.drawable.button_clicked);
else
mSoundBtn.setBackgroundResource(R.drawable.button_not_clicked);
isSoundBtnSelected = !isSoundBtnSelected;
}
});
}
}
imageButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_UP)
{
// change background and other stuff...
return true;
}
return false;
}
});
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@color/black" /> <!-- pressed -->
<item android:state_activated="true"
android:drawable="@color/colorAccent" /> <!-- focused -->
<item android:drawable="@color/colorPrimary" /> <!-- default -->