这个是个简单的加入购物车的动画,可以设置开始的位置和结束的位置。先看效果图:
MainActivity代码如下:
public class MainActivity extends Activity { private LinearLayout gouwuche; private TextView buyNum_tv; private ImageView buyImg;// 这是在界面上跑的小图片 private ViewGroup anim_mask_layout;//动画层 private int buyNum = 0;//购买数量 private ImageView goshoppingcar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); gouwuche = (LinearLayout) findViewById(R.id.jiaru_goshopping); goshoppingcar = (ImageView) findViewById(R.id.detail_share); buyNum_tv = (TextView) findViewById(R.id.buy_num); gouwuche.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int[] start_location = new int[2];// 一个整型数组,用来存储按钮的在屏幕的X、Y坐标 view.getLocationInWindow(start_location);// 这是获取购买按钮的在屏幕的X、Y坐标(这也是动画开始的坐标) buyImg = new ImageView(MainActivity.this);// buyImg是动画的图片,我的是一个小球(R.drawable.sign) buyImg.setImageResource(R.drawable.sign);// 设置buyImg的图片 setAnim(buyImg, start_location);// 开始执行动画 } }); } private void setAnim(final View v, int[] start_location) { anim_mask_layout = null; anim_mask_layout = createAnimLayout(); anim_mask_layout.addView(v);//把动画小球添加到动画层 final View view = addViewToAnimLayout(anim_mask_layout, v, start_location); int[] end_location = new int[2];// 这是用来存储动画结束位置的X、Y坐标 goshoppingcar.getLocationInWindow(end_location);// shopCart是那个购物车 // 计算位移 int endX = 0 - start_location[0] + 40;// 动画位移的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, end_location[0], 0, endY); translateAnimationY.setInterpolator(new AccelerateInterpolator()); translateAnimationY.setRepeatCount(0);// 动画重复执行的次数 translateAnimationX.setFillAfter(true); AnimationSet set = new AnimationSet(false); set.setFillAfter(false); set.addAnimation(translateAnimationY); set.addAnimation(translateAnimationX); set.setDuration(800);// 动画的执行时间 view.startAnimation(set); // 动画监听事件 set.setAnimationListener(new Animation.AnimationListener() { // 动画的开始 @Override public void onAnimationStart(Animation animation) { v.setVisibility(View.VISIBLE); } @Override public void onAnimationRepeat(Animation animation) { // TODO Auto-generated method stub } // 动画的结束 @Override public void onAnimationEnd(Animation animation) { v.setVisibility(View.GONE); buyNum++;//让购买数量加1 buyNum_tv.setText(buyNum + "");// buyNum_tv.setVisibility(View.VISIBLE); } }); } /** * @param * @return void * @throws * @Description: 创建动画层 */ private ViewGroup createAnimLayout() { ViewGroup rootView = (ViewGroup) this.getWindow().getDecorView(); LinearLayout animLayout = new LinearLayout(this); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); animLayout.setLayoutParams(lp); animLayout.setBackgroundResource(android.R.color.transparent); rootView.addView(animLayout); return animLayout; } private View addViewToAnimLayout(final ViewGroup vg, 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; } }
activity_main布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="beautifu.com.amincar.MainActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="#fae6c5"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="加入购物车动画" android:textColor="#875D34" android:textSize="24sp" /> <ImageView android:id="@+id/detail_share" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:scaleType="fitXY" android:src="@drawable/shopping_car" /> <TextView android:id="@+id/buy_num" android:layout_width="15dp" android:layout_height="15dp" android:layout_alignParentRight="true" android:layout_marginTop="5dp" android:background="@drawable/gowu_bg" android:gravity="center" android:text="1" android:textColor="#fff" android:textSize="12sp" android:visibility="gone" /> </RelativeLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:gravity="center" android:orientation="horizontal"> <LinearLayout android:id="@+id/jiaru_goshopping" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2" android:background="#FF7F24" android:clickable="true" android:gravity="center" android:orientation="horizontal"> <TextView android:id="@+id/jiaru_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="加入购物车" android:textColor="#fff" android:textSize="18sp" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="3"> <Button android:id="@+id/lijiyuyue_commdetails" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ef7970" android:text="立即购买" android:textColor="#fff" /> </LinearLayout> </LinearLayout> </LinearLayout>
下面附上我的源码: