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

所属分类: 软件编程 / Android 阅读数: 42
收藏 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地址:点击打开链接

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

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

使用ViewPager实现android软件使用向导功能实现步骤

现在的大部分android软件,都是使用说明,就是第一次使用该软件时,会出现向导,可以左右滑动,然后就进入应用的主界面了,下面我们就实现这个功能
收藏 0 赞 0 分享

android在异步任务中关闭Cursor的代码方法

android在异步任务中如何关闭Cursor?在我们开发应用的时候,很多时候会遇到这种问题,下面我们就看看代码如何实现
收藏 0 赞 0 分享

Android自定义桌面功能代码实现

android自定义桌面其实很简单,看一个例子就明白了
收藏 0 赞 0 分享

android将图片转换存到数据库再从数据库读取转换成图片实现代码

有时候我们想把图片存入到数据库中,尽管这不是一种明智的选择,但有时候还是不得以会用到,下面说说将图片转换成byte[]数组存入到数据库中去,并从数据库中取出来转换成图像显示出来
收藏 0 赞 0 分享

TextView显示系统时间(时钟功能带秒针变化

用System.currentTimeMillis()可以获取系统当前的时间,我们可以开启一个线程,然后通过handler发消息,来实时的更新TextView上显示的系统时间,可以做一个时钟的功能
收藏 0 赞 0 分享

Android用ListView显示SDCard文件列表的小例子

本文简单实现了用ListView显示SDCard文件列表,目录的回退等功能暂不讨论,获取文件列表,files即为所选择目录下的所有文件列表
收藏 0 赞 0 分享

Android拦截外拨电话程序示例

这篇文章主要介绍了Android拦截外拨电话的示例,大家参考使用吧
收藏 0 赞 0 分享

通过Html网页调用本地安卓(android)app程序代码

如何使用html网页和本地app进行传递数据呢?经过研究,发现还是有方法的,总结了一下,大致有一下几种方式
收藏 0 赞 0 分享

android Textview文字监控(Textview使用方法)

以手机号充值为例,当用户输入最后一位数时候,进行汇率的变换,本文就实现类似这样的功能
收藏 0 赞 0 分享

Android ListView长按弹出菜单二种实现方式示例

这篇文章主要介绍了Android ListView长按弹出菜单的方法,大家参考实现
收藏 0 赞 0 分享
查看更多