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

时间:2016-09-14 06:11:52

标签: android android-button

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

我的布局:

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

这是我的XML in drawable:

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

4 个答案:

答案 0 :(得分:1)

在您的情况下,您想要更改音量指示器,我认为您应该以编程方式执行此操作。

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

                    }
                }
            });

答案 1 :(得分:0)

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

<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"/>

答案 2 :(得分:0)

如果要在单击按钮时永久更改按钮的图像,则可以通过编程方式在按钮的onClick void内部进行操作。 例如,如果

image1:R.drawable.image_first image2: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"/>

在您可以执行的活动中:

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)并将if语句放在public void click中。

答案 3 :(得分:0)

在我的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{

按钮音量;    boolean 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;
}