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

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

1、首先展示下效果图

aef8a86a4eb27cbd0452c7f7cb8ede0e.gif

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地址:点击打开链接

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(2338):记录解决问题的一次

<!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><style type"text/css">#f {font-size: 50px;font-family: 幼圆;}#btn {width: 50px;height: 30px;opacity: 0.5;background-color: paleg…

apicloud,aliyunlive,测试成功

1.推流 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"maximum-scale1.0,minimum-scale1.0,user-scalable0,widthdevice-width,initial-scale1.0"><ti…

走进netty

三月份开始看公司RPC框架的源码,发现如果要折腾明白,网络通讯这块知识必不可少.于是从如下几点开始逐步研究. 一、基础知识篇 1.Unix下5种I/O模型 Linux的内核将所有外部设备都看作一个文件来操作,对于一个文件的读写操作会调用内核提供的系统命令,返回一个fd(文件描述符),而对…

ZeroC ICE的远程调用框架 ASM与defaultServant,ServantLocator

ASM与defaultServant&#xff0c;ServantLocator都是与调用调度&#xff08;Dispatch&#xff09;相关的。 ASM是ServantManager中的一张二维表_servantMapMap&#xff0c;默认Servant则由_defaultServantMap和_locatorMap两张一维表维护。一个对 象可由这样的字符串指定"…

gdb调试若干问题

1.若干命令速查 file <文件名>&#xff1a;加载被调试的可执行程序文件。因为一般都在被调试程序所在目录下执行GDB&#xff0c;因而文本名不需要带路径。示例&#xff1a;(gdb) file gdb-sample r&#xff1a;Run的简写&#xff0c;运行被调试的程序&#xff0c;也是重启…

java线程中的notifyAll唤醒操作

注意&#xff1a; java中的notifyAll和notify都是唤醒线程的操作&#xff0c;notify只会唤醒等待池中的某一个线程&#xff0c;但是不确定是哪一个线程&#xff0c;notifyAll是针对指定对象里面的所有线程执行唤醒操作&#xff0c;指定对象一旦唤醒成功。则会立即加入线程的资源…

阻止html页面加载,如何防止页面加载重复的JS?

我自己写了一个页面&#xff0c;除了公共部分的页头页脚以外&#xff0c;其余内容都是通过Ajax加载过来的&#xff0c;现在遇到了比较头疼的问题&#xff1a;先说一下我加载的方式$.ajax({type : "GET",url : hrefPage,dataType : html,cache : true, // (warning: t…

IIS的安装与配置

安装IIS 若操作系统中还未安装IIS服务器&#xff0c;可打开“控制面板”&#xff0c;然后单击启动“添加/删除程序”&#xff0c;在弹出的对话框中选择“添加/删除Windows组件”&#xff0c;在Windows组件向导对话框中选中“Internet信息服务&#xff08;IIS&#xff09;”&…

ie11不兼容 html编辑器,ie11兼容性视图护驾浏览网页

安装 ie11 后&#xff0c;原来的在线网页编辑器不能粘贴、也不能插入图片了&#xff0c;有些网站也不能登录&#xff0c;怪不适用的&#xff0c;无奈只能启用ie11兼容模式。把显示或操作不正常的网站添加到兼容性视图后&#xff0c;又可以操作了&#xff0c;好在ie有兼容模式&a…

gitlab用户添加ssh免密钥认证后clone还是要求输入密码

今天在centos 7公网服务器上安装gitlab在配置ssh免密钥时遇到一个奇怪的事&#xff0c;正确添加了本机的公钥到gitlab账户上&#xff0c;进行clone时死活都要你输入密码gitlab使用yum安装的&#xff0c;之前在vmware虚机上的一台centos 7安装也没有这个问题根据这个文章的思路进…