首页 > 代码库 > android求助:关于播放器中的“播放/暂停”键: 用ImageButton来设置点击效果时的问题

android求助:关于播放器中的“播放/暂停”键: 用ImageButton来设置点击效果时的问题

============问题描述============


大家好,我最近遇到个问题:
   大家都知道,播放器中的播放/暂停键是这样的逻辑:当用户点击了这个键,如果当前显示的是“播放”图案,会变为“暂停”图案;反之,如果当前是“暂停”图案,会变为“播放”图案 , 如此反复。。。
现在我正在实现这个效果,我是这样做的:
   在以上的基本效果的基础上,我还添加了点击过程中的效果,就是当点下还木有松开时,会有一个点击效果(比如给当前图片加个光晕效果什么的),这种效果我是在xml中用selector标签实现的,上代码:
按play时:(xml_player_play.xml)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
	<item
		android:state_pressed="false"
		android:drawable="@drawable/player_play_default" />
	<item
		android:state_pressed="true"
		android:drawable="@drawable/player_play_pressed" />
 	<item
		android:state_window_focused="false"
		android:drawable="@drawable/player_play_default" />
</selector>


按pause时:(xml_player_pause.xml)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
	<item
		android:state_pressed="false"
		android:drawable="@drawable/player_pause_default" />
	<item
		android:state_pressed="true"
		android:drawable="@drawable/player_pause_pressed" />
 	<item
		android:state_window_focused="false"
		android:drawable="@drawable/player_pause_default" />
</selector>


ImageButton的xml文件(略去了id、宽高之类的代码):
<ImageButton
            android:background="#0000"
            android:src="http://www.mamicode.com/@drawable/xml_player_play"
            android:scaleType="centerCrop" />


然后在代码中实现了onClick()方法,用来判断该怎么变化图片:
if( Global.bt_play_play == true ){
				play.setBackgroundResource(R.drawable.xml_player_pause);
				Global.bt_play_play = false;
			}else if( Global.bt_play_play == false ){
				play.setBackgroundResource(R.drawable.xml_player_play);
				Global.bt_play_play = true;
			}

其中的Global.bt_play_play是个boolean静态变量,默认是true,用来判断当前是神马图案,也就是说是否应该变换图案。

貌似看起来木有问题,但是运行起来后是这样:
刚运行起来:
点击一下后:
再点击一下后:

这是为什么呢,为什么会出现一个椭圆圈在里面?而且图片变化后,之前的图片没消失,重合在一起了?

============解决方案1============


设置图片之前。先把图片清空一下嘛。。
为什么椭圆?不清楚。
是不是两张图片。size(height*width)不一样。但是使用的是同一种布局。比如。自动扩充。
然后导致了。会有椭圆?

============解决方案2============


<ImageButton
            android:background="#0000"
            android:src="http://www.mamicode.com/@drawable/xml_player_play"
            android:scaleType="centerCrop" />

有src就不要设置background ,把background或者src删掉试试 
按逻辑你的java代码是没错的。。。

============解决方案3============


把selector中的 

  <item
        android:state_window_focused="false"
        android:drawable="@drawable/player_pause_default" />

这些都去掉。

写成如下模式 414

<?xml version="1.0" encoding="UTF-8"?>    
<selector xmlns:android="http://schemas.android.com/apk/res/android">    
    <item           android:state_pressed="false"  android:drawable="@drawable/button_add" />    
    <item           android:state_pressed="true"   android:drawable="@drawable/button_add_pressed" />    
   <item           android:state_focused="true"    android:drawable="@drawable/button_add_pressed" />    
<item           android:drawable="@drawable/button_add" />    
</selector>    

============解决方案4============


if( Global.bt_play_play == true )
{
      play.setImageResource(R.drawable.xml_player_pause);
      Global.bt_play_play = false;
}
else
{
      play.setImageResource(R.drawable.xml_player_play);
      Global.bt_play_play = true;
}

android求助:关于播放器中的“播放/暂停”键: 用ImageButton来设置点击效果时的问题