2014-09-03 3 views
1

Я хочу выполнить простую анимацию перевода в android 2.3. Вот то, что я сейчасПостоянная анимация Android

Layout

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/root_test_layout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:contentDescription="@string/pointer_description" 
     android:src="@drawable/red_dot" /> 

    <RelativeLayout 
     android:id="@+id/testBottomPanel" 
     android:layout_width="320dp" 
     android:layout_height="295dp" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" > 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_centerInParent="true" 
      android:scaleType="centerCrop" 
      android:src="@drawable/measure_panel" /> 

     <ToggleButton 
      android:id="@+id/startTestSwitch" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:background="@drawable/start_test_check" 
      android:focusable="false" 
      android:focusableInTouchMode="false" 
      android:layout_marginTop="20dp" 
      android:textOff="" 
      android:textOn="" /> 
    </RelativeLayout> 

</RelativeLayout> 

Настройка анимации:

private void setUpView() { 
      ToggleButton testSwitch = (ToggleButton)findViewById(R.id.startTestSwitch); 
      final RelativeLayout lay = (RelativeLayout)findViewById(R.id.testBottomPanel); 

      final TranslateAnimation anim = new TranslateAnimation(0, 0, 0, 100); 
      anim.setDuration(1000); 
      anim.setFillAfter(true); 
      anim.setAnimationListener(this); 

      testSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        if(isChecked) { 
         lay.startAnimation(anim); 
        } 
        else { 

        } 
       } 
      }); 
     } 

СЛУШАТЕЛЬ:

@Override 
public void onAnimationEnd(Animation animation) { 
    final RelativeLayout lay = (RelativeLayout)findViewById(R.id.testBottomPanel); 
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)lay.getLayoutParams(); 
    params.topMargin += 100; 
    lay.setLayoutParams(params); 
} 

Моя проблема заключается в том, что, когда анимация завершается все тянет нормально, но мой ToggleButton на макете, кажется, остается на своем месте. Я имею в виду, что он рисует 100px ниже своего исходного положения, но когда я нажимаю на него, он не реагирует. Чтобы использовать его, мне нужно нажать 100px над местом, где его рисунки после анимации. Как перевести этот вкладку «Переключить кнопку» в положение, в котором ее рисование после анимации?

+0

Возможно, вам нужно позвонить 'invalidate()' на кнопку, чтобы перерисовать его? –

ответ

0

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

+0

Что такое «анимация свойств»? и особенно для девятиандроидов. – djdance

+0

Вы можете прочитать о них здесь: http://developer.android.com/guide/topics/graphics/prop-animation.html Я не знаком с девятидюймовыми, но они упоминают объектный аниматор на первой странице, который поддерживается анимация свойств. – Whitney

+0

спасибо. Обнаружен и опробован. К сожалению, он (в девятидвудродвигателе по API 10) не перемещает вид в относительном макете родителя слева или справа. Просмотр анимации перемещает его, но «практически», как указано здесь ... так что только один способ - установить параметры в конце анимации просмотра – djdance