2016-09-14 75 views
1

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

+0

我想也许你真正需要的东西是ToggleButton – RRTW

+0

它的作品,,,感谢所有,,,我真的很感激它。 –

回答

0

如果你想改变你的按钮的图像永久当你点击它,可以方便地做到这一点编程,你的按钮的onclick空洞内。 例如,如果

此搜索: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"/> 
中,你可以做的活动

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); 
} 

} 

如果你想再次点击后回来之前的图像,只保存按钮的状态(布尔点击ed = true/false)并在public void click中放置一个if语句。

+0

yess,它的工作原理,,,但正如你所说,回到以前的形象,我应该在里面,如果声明,,,我混淆如何在公共空间内的声明如果在巴斯科avr和arduino IDE,我可以轻松理解,但在Java中,我真的不明白,,,你会给示例代码,如果声明在公共空白...感谢之前, –

+0

感谢亚历克斯,你让我的一天..:D –

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

如果我删除该行,所以按钮是不可见的,按钮是可见的(显示Volume_off),当我按下按钮, –

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 

        } 
       } 
      }); 
+0

感谢QuangNguyen回应我的问题,我不明白与“isVolumeOn”。那什么意识? 可否给我更清楚的示例程序,对不起,我这里是新的.. –

+0

感谢QungNguyen,我真的很感激它 –

+0

您是否添加了用户可以打开或关闭应用程序中的音量的功能? –

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