仿美团外卖添加商品抛物线动画

来源:互联网 发布:怎么在淘宝卖二手货 编辑:程序博客网 时间:2024/04/30 12:37

知识点:

安卓基础动画的使用

动态添加控件

获得控件所在屏幕的位置

动画插值器的使用


运行效果:


代码:

public class MainActivity extends Activity implements View.OnClickListener {    //按钮id数组    private int[] buttonId = new int[]{            R.id.btTest, R.id.btTest2, R.id.btTest3, R.id.btTest4, R.id.btTest5, R.id.btTest6, R.id.btTest7, R.id.btTest8, R.id.btTest9,            R.id.btTest11, R.id.btTest12, R.id.btTest13, R.id.btTest14, R.id.btTest15, R.id.btTest16, R.id.btTest17, R.id.btTest18, R.id.btTest19,            R.id.btTest21, R.id.btTest22, R.id.btTest23, R.id.btTest24, R.id.btTest25, R.id.btTest26, R.id.btTest27, R.id.btTest28, R.id.btTest29    };    private ImageView ivGouWuChe;//购物车图片    private int gouWuX, gouWuY;//购物车坐标    private RelativeLayout layout;//父布局    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //循环注册按钮        for (int i = 0; i < buttonId.length; i++) {            Button button = (Button) findViewById(buttonId[i]);            button.setOnClickListener(this);        }        ivGouWuChe = (ImageView) findViewById(R.id.ivGouWuChe);        layout = (RelativeLayout) findViewById(R.id.activity_main);    }    /**     * 给控件添加抛物线动画效果     * 4个参数 1、需要添加动画的控件 2、终点坐标x,y(相对于控件的相对坐标) 3、是否停留在动画结束的位置     */    private void startPaoWuXianAnimation(View view, boolean isStay) {        //获得按钮位于屏幕的位置        final int[] location = new int[2];        view.getLocationOnScreen(location);        int x1 = location[0];        int y1 = location[1];        //动态添加 圆点图片        final ImageView iv = new ImageView(this);        iv.setImageResource(R.drawable.qiu);        layout.addView(iv);        //动态设置圆点图片的大小        RelativeLayout.LayoutParams linearParams = (RelativeLayout.LayoutParams) iv.getLayoutParams(); //取控件textView当前的布局参数        linearParams.height = 30;// 控件的高强制设成20        linearParams.width = 30;// 控件的宽强制设成30        iv.setLayoutParams(linearParams);        //设置动画(位移动画的构造方法注意!!!)        TranslateAnimation animationX = new TranslateAnimation(Animation.ABSOLUTE, x1, Animation.ABSOLUTE, gouWuX + 30, Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 0);//X轴上的位移        TranslateAnimation animationY = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 0, Animation.ABSOLUTE, y1 - 10, Animation.ABSOLUTE, gouWuY);//X轴上的位移        animationX.setDuration(500);//设置时间        animationY.setDuration(500);//设置时间        animationX.setFillAfter(isStay);//设置停留到最后的位置        animationY.setFillAfter(isStay);//设置停留到最后的位置        //给动画添加插值器        animationX.setInterpolator(new LinearInterpolator());//水平方向是匀速运动        animationY.setInterpolator(new AccelerateInterpolator());//垂直方向是加速运动        //创建动画数组(让两个动画同时运行)        AnimationSet mAnimationSet = new AnimationSet(false);        mAnimationSet.addAnimation(animationX);        mAnimationSet.addAnimation(animationY);        iv.startAnimation(mAnimationSet);        mAnimationSet.setAnimationListener(new Animation.AnimationListener() {            @Override            public void onAnimationStart(Animation animation) {            }            @Override            public void onAnimationEnd(Animation animation) {                if (iv.getVisibility() == View.VISIBLE) {                    iv.setVisibility(View.GONE);                }            }            @Override            public void onAnimationRepeat(Animation animation) {            }        });    }    @Override    public void onClick(View view) {        gouWuX = (int) ivGouWuChe.getX();//获得购物车的坐标        gouWuY = (int) ivGouWuChe.getY();        startPaoWuXianAnimation(view, false);    }}

xml 代码略



0 0
原创粉丝点击