按下时更改按钮图像,释放时按钮图像不变
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;
}
当我按下按钮时图像发生变化,但我的问题是当我释放按钮时,图像再次发生变化(不保留图像)。我是 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;
}