2016-02-18 4 views
0

У меня есть ImageButton, и «ЦСИ» рисуем для него это состояние в зависимости от селектора:RotateAnimation и несколькими состояниями Android, кнопка

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

и введен в эксплуатацию следующим образом:

<ImageButton 
    android:id="@+id/button_capture" 
    android:layout_width="72sp" 
    android:layout_height="72sp" 
    android:scaleType="fitXY" 
    android:layout_gravity="center" 
    android:background="@null" 
    android:src="@drawable/btn_camera_capture"/> 

для того, чтобы он ориентировал правильный путь, так как устройство физически поворачивается, я поворачиваю эту кнопку с помощью анимации:

RotateAnimation newAnim = new RotateAnimation(oldOrientation, newOrientation, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
    newAnim.setRepeatCount(0); 
    newAnim.setDuration(1000); 
    newAnim.setFillAfter(true); 
    newAnim.setFillEnabled(true); 

Это прекрасно работает на Samsung Galaxy S4. Кнопка выполняет анимацию вращения, затем переходит в новое вращение и нажатие на нее в любое время изменяет изображение в соответствии с селектором состояний, но сохраняет соответствующую ориентацию, благодаря вызовам setFill....

На Samsung Ace 3 он также работает отлично по большей части, но нажатие кнопки приводит к тому, что нажатое изображение сразу отображается в ориентации по умолчанию, то есть без вращения, и после того, как оно больше не нажато, остается в этой неправильной ориентации.

Как я могу это решить?

Конечно, я могу взять на себя ответственность за изменение состояния кнопки в коде и обработать все это сам, но мне интересно, что мое ожидание должно быть в первую очередь, и не делаю ли я что-то неправильно.

ответ

0

Я решил это самостоятельно, выполняя, как я предложил, может быть необходимо, и обрабатывать измененное нажатие состояние меняет, а не использовать селектор XML.

/*We transition the button between drawables based on state. 
* This should be done via a selector in XML, but that doesn't play nicely 
* with the rotation animation on all phones. 
*/ 
captureButton.setOnTouchListener(new OnTouchListener() 
{ 
    /**{@inheritDoc}*/ 
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     switch (event.getAction()) 
     { 
      case MotionEvent.ACTION_DOWN: 
       // PRESSED 
       captureButton.setImageResource(R.drawable.btn_camera_pressed); 
       break; 
      case MotionEvent.ACTION_UP: 
       // RELEASED 
       captureButton.setImageResource(R.drawable.btn_camera_default); 
       break; 
     } 
     return false; 
    } 
}); 

Это, похоже, работает на обоих устройствах без каких-либо дальнейших изменений. Возможно, есть ошибка в версии Android на Ace 3.

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