Как сделать такую ​​анимацию в андроиде?

В моем приложении для Android вид выглядит следующим образом:

Посмотрите на букву D на изображении

Теперь здесь D — это небольшая часть, которая представляет собой любой вид или кнопку. Я хочу, если пользователь нажмет на эту часть «D», представление, отображаемое в другом цвете, должно быть переведено слева направо, и только часть «D» появится на самом правом краю экрана. И если пользователь снова нажмет на эту часть «D», представление будет переведено справа налево и будет видно, как на изображении выше.

Как это можно сделать?


person Android_Developer    schedule 28.11.2011    source источник


Ответы (1)


Предположим, D — изображение и его перемещение от 0 до 200 в направлении x. См. код ниже.

public class DActivity extends Activity {
ImageView D;
int x=0,y=0;
int a=0;
int newx=0;
TranslateAnimation TA;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    D=(ImageView)findViewById(R.id.d);
    RelativeLayout RL=(RelativeLayout)findViewById(R.id.rl);
    D.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            x=v.getLeft();
            y=v.getTop();
            Toast.makeText(getApplicationContext(), "X="+x+"y="+y, Toast.LENGTH_LONG).show();
            if(x==0){
                D.setEnabled(false);
                a=200;
                newx=200;
                Anim();
            }
            if(x==200){
                D.setEnabled(false);
                a=-200;
                newx=0;
                Anim();
            }
            return true;
        }
    });

}
public void Anim(){
    TranslateAnimation TAnimation=new TranslateAnimation(0, a, 0,0);
    TAnimation.setInterpolator(new LinearInterpolator());
    TAnimation.setDuration(5000);
    TAnimation.setFillAfter(false);
    TAnimation.setFillEnabled(true);
    TAnimation.setFillBefore(true);
    D.startAnimation(TAnimation);

    TAnimation.setAnimationListener(new AnimationListener() {

        public void onAnimationStart(Animation animation) { }

        public void onAnimationRepeat(Animation animation) {}

        public void onAnimationEnd(Animation animation) {               
            LayoutParams param=new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
            param.setMargins(newx, y, 0, 0);
                D.setLayoutParams(param);
                D.setEnabled(true);
        }
    });
}

}

person VSC    schedule 28.11.2011