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

问题描述 投票:1回答:2

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

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

如何制作?

android android-layout android-emulator android-animation translate-animation
2个回答
2
投票

此视图称为滑动抽屉。

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

还有一些链接

Link1

Link2

编辑

this是Sliding-drawer演示示例的链接

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

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


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

}

© www.soinside.com 2019 - 2024. All rights reserved.