如何在android中制作这样的动画?

时间:2011-11-28 04:49:07

标签: android android-layout android-emulator android-animation translate-animation

在我的Android应用程序中,视图如下图所示:

See the "D" in the image

现在,这里D是小部分,可以是任何视图或可以是按钮。 我想要的是,如果用户点击那个“D”部分,以不同颜色显示的视图应该从左到右平移,只有“D”部分出现在屏幕的最右边。如果用户再次单击该“D”部分,则视图将从右向左翻译,并且如上图所示。

如何制作?

2 个答案:

答案 0 :(得分:2)

此视图称为滑动抽屉。

您可以参考this链接进行滑动抽屉控制。

还有一些链接

Link1

Link2

修改

this是Sliding-drawer

的演示示例的链接

在这个演示示例中,有一个布局名称"main.xml",其中有一个变量my:direction="topToBottom",这描述了你要从哪里打开滑动抽屉

在你的情况下,你想从左向右滑动,所以你的变量将是我的:direction =“leftToRight”

答案 1 :(得分:2)

假设D是一个i​​mageview,它在x方向上从0移动到200。 见下面的代码。

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);
        }
    });
}

}