按下时更改按钮图像,释放时按钮图像不变

Change image of button when pressed, make image of button not change when released

当我按下按钮时图像发生变化,但我的问题是当我释放按钮时,图像再次发生变化(不保留图像)。我是 Java 编程新手。

我的布局:

 <Button
    android:background="@drawable/volume"
    android:layout_width="90dp"
    android:layout_height="90dp"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"/>

这是我的 XML 可绘制对象:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
    android:drawable="@drawable/volume_off" /> <!-- pressed -->

<item android:drawable="@drawable/volume_on" /> <!-- default -->

您想从选择器中删除默认图像

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/volume_off" /> <!-- pressed -->
</selector>

删除这一行<!--<item android:drawable="@drawable/volume_on" /> remove default-->

按钮状态改变时默认设置。

<Button
android:background="@drawable/volume"
android:layout_width="90dp"
android:layout_height="90dp"
android:src="@drawable/volume_on"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"/>

在您的情况下,您想要更改音量指示器,我认为您应该像这样以编程方式进行。

  //At the top of your activity,declare a global variable
  boolean isVolumeOn = true;

  volumeButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //check your volume status
                    if(isVolumeOn){
                        view.setBackgroundResource(R.drawable.volume_off);
                        isVolumeOn = false;
                        //Turn off your volume here

                    }else{
                        view.setBackgroundResource(R.drawable.volume_on);
                        isVolumeOn = true
                        //Turn on your volume here

                    }
                }
            });

如果您想在单击按钮时永久更改按钮的图像,可以方便地以编程方式在按钮的 onClick void 中执行此操作。 例如,如果

图片 1:R.drawable.image_first 图 2:R.drawable.image_second

并且在您的 XML 布局文件中您有:

 <Button
    android:background="@drawable/volume"
    android:layout_width="90dp"
    android:layout_height="90dp"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:onClick="click"/>

在 Activity 你可以做:

public Class myActivity extends Activity{

Button mButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myactivity_layout);
    mButton = (Button) findViewById(R.id.button);
}

public void click(View v){
   mButton.setBackgroundResource(R.drawable.image_second);
}

}

如果你想在再次点击后回到上一张图片,只需保存你的按钮状态(boolean clicked = true/false)并在 public void click 中放置一个 if 语句.

在我的 content_main.xml

 <Button
    android:id="@+id/button"
    android:background="@drawable/volume_on"
    android:layout_width="90dp"
    android:layout_height="90dp"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:onClick="click" />

在我的 MainActivity.java

public Class myActivity extends AppCompatActivity{

按钮音量; 布尔值 isPressed=false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myactivity_layout);
    volume = (Button) findViewById(R.id.button);
}

public void click(View v){
if (isPressed) {
    volume.setBackgroundResource(R.drawable.volume_off);
    Toast.makeText(this, "Volume Off",
            Toast.LENGTH_SHORT).show();
}else{
    volume.setBackgroundResource(R.drawable.volume_on);
    Toast.makeText(this, "Volume On",
            Toast.LENGTH_SHORT).show();
}
    isPressed=!isPressed;
}