Android使用动画动态添加商品进购物车

所属分类: 软件编程 / Android 阅读数: 58
收藏 0 赞 0 分享

本文实例为大家分享了Android添加商品进购物车的具体代码,供大家参考,具体内容如下

1、首先展示下效果图

2、讲一下思路,小球由加号位置运动到购物车位置,首先得获得这两个点在整个屏幕中的坐标,然后分别计算这两个点的横纵坐标的差值,再通过TranslateAnimation这个类设置小球在X、Y方向上的偏移量,最后通过AnimationSet这个类将这两个动画放在一起执行。这是小球运动的动画,还有就是购物车变大缩小的动画。这个动画通过ObjectAnimator的ofFloat的方法设置缩放,要注意的是当小球落下的时候,购物车才开始动画,所以要设置一下setStartDelay这个方法。

3、具体的代码我就贴一下动画部分的代码,如果想要这个Demo看下我最后贴出的Github的地址

@Override
  public void setAnim(View view) {
    // TODO Auto-generated method stub
    int[] start_location = new int[2];// 一个整型数组用来存储按钮在屏幕的X,Y坐标
    view.getLocationInWindow(start_location);// 购买按钮在屏幕中的坐标
    buyImg = new ImageView(this);// 动画的小圆圈
    buyImg.setImageResource(R.drawable.sign);// 设置buyImg的图片
    setAnim(buyImg, start_location);
  }
 
  /**
   * hdh: 创建动画层
   *
   * @return
   */
  private ViewGroup createAnimLayout() {
    ViewGroup rootView = (ViewGroup) this.getWindow().getDecorView();// 获得Window界面的最顶层
    LinearLayout animLayout = new LinearLayout(this);
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
    animLayout.setLayoutParams(lp);
    //animLayout.setId();
    animLayout.setBackgroundResource(android.R.color.transparent);
    rootView.addView(animLayout);
    return animLayout;
  }
 
  /**
   * hdh:
   *
   * @param vp
   * @param view
   * @param location
   * @return
   */
  private View addViewToAnimLayout(final ViewGroup vp, final View view, int[] location) {
    int x = location[0];
    int y = location[1];
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    lp.leftMargin = x;
    lp.topMargin = y;
    view.setLayoutParams(lp);
    return view;
  }
 
  /**
   * hdh:动画
   *
   * @param v
   * @param start_location
   */
  private void setAnim(final View v, int[] start_location) {
    anim_mask_layout = null;
    anim_mask_layout = createAnimLayout();
    anim_mask_layout.addView(v);
    View view = addViewToAnimLayout(anim_mask_layout, v, start_location);
    int[] end_location = new int[2];// 存储动画结束位置的X,Y坐标
    text_chart_num.getLocationInWindow(end_location);// 将购物车的位置存储起来
    // 计算位移
    int endX = end_location[0] - start_location[0];// 动画位移的X坐标
    int endY = end_location[1] - start_location[1];// 动画位移的y坐标
    TranslateAnimation translateAnimationX = new TranslateAnimation(0, endX, 0, 0);
    translateAnimationX.setInterpolator(new LinearInterpolator());// 设置此动画的加速曲线。默认为一个线性插值。
    translateAnimationX.setRepeatCount(0);// 动画重复的次数
    translateAnimationX.setFillAfter(true);
 
    TranslateAnimation translateAnimationY = new TranslateAnimation(0, 0, 0, endY);
    translateAnimationY.setInterpolator(new AccelerateInterpolator());
    translateAnimationY.setRepeatCount(0);// 动画重复次数
    translateAnimationY.setFillAfter(true);
 
    AnimationSet set = new AnimationSet(false);
    set.setFillAfter(false);
    set.addAnimation(translateAnimationX);
    set.addAnimation(translateAnimationY);
    set.setDuration(1000);
    view.startAnimation(set);
    set.setAnimationListener(new Animation.AnimationListener() {
 
      @Override
      public void onAnimationStart(Animation animation) {
        // TODO Auto-generated method stub
        v.setVisibility(View.VISIBLE);
      }
 
      @Override
      public void onAnimationRepeat(Animation animation) {
        // TODO Auto-generated method stub
 
      }
 
      @Override
      public void onAnimationEnd(Animation animation) {
        // TODO Auto-generated method stub
        v.setVisibility(View.GONE);
      }
    });
    ObjectAnimator anim = ObjectAnimator//
        .ofFloat(view, "scale", 1.0F, 1.5F, 1.0f)//
        .setDuration(500);//
    anim.setStartDelay(1000);
    anim.start();
    anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
      @Override
      public void onAnimationUpdate(ValueAnimator animation) {
        float cVal = (Float) animation.getAnimatedValue();
        image_chart.setScaleX(cVal);
        image_chart.setScaleY(cVal);
        text_chart_num.setScaleX(cVal);
        text_chart_num.setScaleY(cVal);
      }
    });
  }

4、GitHub地址:点击打开链接

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Android框架学习之Volley和Glide详解

这篇文章主要给大家介绍了关于Android框架学习之Volley和Glide的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android中Fragment的基本用法示例总结

Fragment是activity的界面中的一部分或一种行为,下面这篇文章主要给大家介绍了关于Android中Fragment的基本用法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
收藏 0 赞 0 分享

Android.mk引入第三方jar包和so库文件的方法

这篇文章主要介绍了Android.mk引入第三方jar包和so库文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android仿微信录制小视频

这篇文章主要为大家详细介绍了Android仿微信录制小视频,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

android实现一键锁屏和一键卸载的方法实例

这篇文章主要给大家介绍了关于android如何实现一键锁屏和一键卸载的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
收藏 0 赞 0 分享

Android手势密码--设置和校验功能的实现代码

这篇文章主要介绍了Android手势密码--设置和校验功能的实现代码,非常不错,具有一定的参考校验价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Kotlin学习笔记之const val与val

这篇文章主要给大家介绍了关于Kotlin学习笔记之const val与val的相关资料,并给大家介绍了const val和val区别以及Kotlin中var和val的区别,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android实现调用系统分享功能示例的总结

这篇文章主要介绍了通过Android调用系统分享文本信息、单张图片、多个文件和指定分享到微信、QQ,同时分享图片和文字的功能示例,小编觉得挺不错,一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android自定义view实现输入控件

这篇文章主要为大家详细介绍了Android自定义view实现输入控件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android使用Intent.ACTION_SEND分享图片和文字内容的示例代码

这篇文章主要介绍了Android使用Intent.ACTION_SEND分享图片和文字内容的示例代码的实例代码,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多