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

 更新时间:2018年06月30日 15:09:04   作者:android_hdh  
这篇文章主要为大家详细介绍了Android使用动画动态添加商品进购物车,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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地址:点击打开链接

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

相关文章

  • Java4Android开发教程(二)hello world!

    Java4Android开发教程(二)hello world!

    一般的开发教程都是介绍完安装配置开发环境,紧接着来一篇hello world,算是国际惯例吧,我们当然也不能免俗,哈哈,各位看官请看好了!
    2014-10-10
  • Android App中制作仿MIUI的Tab切换效果的实例分享

    Android App中制作仿MIUI的Tab切换效果的实例分享

    这篇文章主要介绍了Android App中制作仿MIUI的Tab切换效果的实例分享,实现具有跟随手指滚动而滚动功能的ViewPagerIndicator,需要的朋友可以参考下
    2016-04-04
  • android 退出程序解决内存释放的问题

    android 退出程序解决内存释放的问题

    做Android项目的时候发现一个问题:当应用程序退出了,点击"设置"查看应用程序,界面显示着可以点击"强制关闭 由于这个问题我发现了一个更加严重的问题,那就是,在我应用程序退出之后,系统并没有释放掉我应用程序所占内存
    2012-11-11
  • Android自定义倒计时按钮

    Android自定义倒计时按钮

    这篇文章主要为大家详细介绍了Android自定义倒计时按钮,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android Studio 中运行 groovy 程序的方法图文详解

    Android Studio 中运行 groovy 程序的方法图文详解

    这篇文章主要介绍了Android Studio 中 运行 groovy 程序的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Android星级评分条的实现代码

    Android星级评分条的实现代码

    这篇文章主要为大家详细介绍了Android星级评分条的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • Android自定义View播放Gif动画的示例

    Android自定义View播放Gif动画的示例

    本篇文章主要介绍了Android自定义View播放Gif动画的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • android保存Bitmap图片到指定文件夹示例

    android保存Bitmap图片到指定文件夹示例

    android把Bitmap图片保存到指定文件夹中,具体实现方法如下,感兴趣的朋友可以参考下哈,希望对大家有所帮助
    2013-06-06
  • android自定义组件实现仪表计数盘

    android自定义组件实现仪表计数盘

    这篇文章主要为大家详细介绍了android自定义组件实现仪表计数盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Phonegap使用拍照功能时的内存问题

    Phonegap使用拍照功能时的内存问题

    最近几天在学习使用phonegap进行android应用的开发,网上的资料比较乱,个人参考了很多资料,也试验了很多次,一直在摸索,总算小有心得,这此过程中也遇到了一些问题,这里给大家分享下解决Phonegap使用拍照功能时的内存问题的方法,这里简单的整理一下
    2015-05-05

最新评论