2013-04-17 3 views
1

В моем проекте андроида я взял 2 кнопки изображения (начало и остановка). , когда я нажал КНОПКУ СТАРТОВОГО ИЗОБРАЖЕНИЯ, затем он преобразуется в КНОПКУ ИЗОБРАЖЕНИЯ СТОП, НО снова, когда я нажимаю КНОПКУ ИЗОБРАЖЕНИЯ ОСТАНОВКИ, он не преобразуется в КНОПКУ СТАРТ. Также дайте мне знать, где проблема.single Imagebutton использовать как start-stop-start

mImageButton.setOnFocusChangeListener(
    new OnFocusChangeListener() 
    { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
    // TODO Auto-generated method stub 
    if (hasFocus==true) 
    { 
     mImageButton.setImageResource(R.drawable.stop); 
    } 
else 
{ 
    mImageButton.setImageResource(R.drawable.play); 
} 
    } 
}); 

mImageButton.setOnClickListener(
new OnClickListener() { 
@Override 
public void onClick(View v) { 
// TODO Auto-generated method stub 
mImageButton.setImageResource(R.drawable.stop); 
    } 
    });  
} 
} 
+1

www.c-sharpcorner.com/UploadFile/2fd686/android-buttons-background2/ вы должны использовать 'selectors' для чего вы пытаетесь сделать здесь – Naveen

+0

В своем onClick вы настраиваете его на остановку. Вам нужно перевернуть его, чтобы начать явно, если вы этого хотите. –

+0

@Naveen да должен использовать селектор с ToggleButton для этого сценария – jaga

ответ

1

В Android onFocusChange вызывается перед onCLick. Независимо от того, что вы установили в методе onFocusChange, будет проигнорирован, так как на следующий вызов будет вызываться onClick, и он изменит изображение bak на R.drawable.stop.

Вы не должны использовать onFocusChange вообще за то, что вы пытаетесь сделать. Вместо этого используйте onClick.

private boolean pCurrentlyPlaying = false; 

... 

mImageButton.setOnClickListener(
    new OnClickListener() { 
     @Override 
     public void onClick(View v) 
     { 
      int image = pCurrentlyPlaying ? R.drawable.stop : R.drawable.play; 
      mImageButton.setImageResource(image); 
      pCurrentlyPlaying = !pCurrentlyPlaying ; 
     } 
    });  

Вы также можете использовать ToggleButton, here is an example о том, как определить его в XML.

0

Вы переключаете изображения кнопок в onFocusChangeListener вместо onClickListener. ToggleButton, по-видимому, подходит для сценария, который вы описываете.

0

правильный способ заключается в использовании селекторов

создать следующую ImgBtnSelector.xml в вытяжке

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
    android:state_pressed="true" 
    android:drawable="@drawable/custom_info_bubble1" /> 
    <item 
    android:state_pressed="false" 
    android:drawable="@drawable/custom_info_bubble" /> 
</selector> 

В нашем расположение XML-набор изображений фона кнопки, как этот селектор.

Здесь link на селекторы

0

Попробуйте этот код .. Может быть вам помочь.

boolean isStart = true ; 
boolean isStop = false; 
mImageButton.setOnClickListener(
new OnClickListener() { 
@Override 
public void onClick(View v) { 
// TODO Auto-generated method stub 
if(isStart){ 
isStart =false ; 
isStop = true ; 
mImageButton.setImageResource(R.drawable.play); 
}else{ 
isStart = true ; 
isStop = false; 
mImageButton.setImageResource(R.drawable.stop); 
} 
} 
});  
} 
} 
+0

теперь оно показывает предупреждение и ошибку. isstart-Значение локальной переменной isStart не используется. isstart-Нельзя ссылаться на переменную non-final isStart внутри внутреннего класса, определенного другим методом. – user2189622

0
Boolean isStart=true;//This is global 

mImageButton.setOnClickListener(
new OnClickListener() { 
@Override 
public void onClick(View v) { 
// TODO Auto-generated method stub 
if(isStart) 
mImageButton.setImageResource(R.drawable.stop); 
else 
mImageButton.setImageResource(R.drawable.start); 

isStart=!isStart; 
    } 
    });  
} 
} 

Это то, что вам нужно потерять onfocusChanged Часть проверки

+0

isstart-Нельзя ссылаться на переменную non-final isStart внутри внутреннего класса, определенного другим методом. – user2189622

+0

isstart-Значение локальной переменной isStart не используется. – user2189622

+0

Вот почему я написал глобальную переменную, вы должны объявить ее снаружи. – Naveen

Смежные вопросы