Android开发之购物车添加商品实现抛物线动画
生活随笔
收集整理的這篇文章主要介紹了
Android开发之购物车添加商品实现抛物线动画
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
老套路先上圖:第一個是個人項目用到的效果圖,第二個數摳出來的demo
說下思路很簡單:第一步先拿到加號圖片在屏幕的坐標(X,Y),然后拿到加號按鈕圖片的大小,然后將拿到的坐標和大小復制給一個新的圖片按鈕,將這個新的圖片按鈕添加到加號按鈕的同一個位置。然后對這個新的加號按鈕進行X,Y軸方向上的平移動畫即可。具體實現請看代碼:
package com.xiayiye.honorfirst.activity;import android.app.Activity; import android.content.res.Resources; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.view.animation.AccelerateInterpolator; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.TranslateAnimation; import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView;import com.xiayiye.honorfirst.R;import androidx.annotation.Nullable;/** Copyright (c) 2020, smuyyh@gmail.com All Rights Reserved.* # #* # _oo0oo_ #* # o8888888o #* # 88" . "88 #* # (| -_- |) #* # 0\ = /0 #* # ___/`---'\___ #* # .' \\| |# '. #* # / \\||| : |||# \ #* # / _||||| -:- |||||- \ #* # | | \\\ - #/ | | #* # | \_| ''\---/'' |_/ | #* # \ .-\__ '-' ___/-. / #* # ___'. .' /--.--\ `. .'___ #* # ."" '< `.___\_<|>_/___.' >' "". #* # | | : `- \`.;`\ _ /`;.`/ - ` : | | #* # \ \ `_. \_ __\ /__ _/ .-` / / #* # =====`-.____`.___ \_____/___.-`___.-'===== #* # `=---=' #* # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #* # #* # 佛祖保佑 永無BUG #* # #*//*** @author 下一頁5(輕飛揚)* 創建時間:2020/3/9 13:32* 個人小站:http://yhsh.wap.ai(已掛)* 最新小站:http://www.iyhsh.icoc.in* 聯系作者:企鵝 13343401268* 博客地址:http://blog.csdn.net/xiayiye5* 項目名稱:HonorFirst* 文件包名:com.xiayiye.honorfirst.activity* 文件說明:*/ public class LineAnimateActivity extends Activity {private FrameLayout flContainer;private ImageButton ibAdd;private ImageView imgCart;private int[] outLocation = new int[2];private int[] carLocation = new int[2];@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_line_animate);initView();initListener();}private void initListener() {ibAdd.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//顯示購物車拋物線動畫showAnimate();}});}private void showAnimate() {//在同一個位置復制一個加號按鈕ImageButton ib = new ImageButton(this);//設置復制圖片的背景ib.setBackgroundResource(R.mipmap.button_add);//拿到原圖片的坐標ibAdd.getLocationInWindow(outLocation);imgCart.getLocationInWindow(carLocation);//將原圖在屏幕上面的坐標設置給復制的圖片Log.e("打印坐標", "X:" + outLocation[0] + "==Y:" + (outLocation[1] - getStatusBarHeight()));ib.setX((float) outLocation[0]);//要減去狀態欄的高度ib.setY((float) (outLocation[1] - getStatusBarHeight()));//添加到窗體上flContainer.addView(ib, ibAdd.getWidth(), ibAdd.getHeight());Log.e("打印寬高:", ibAdd.getX() + "=" + ibAdd.getY() + "-----" + ib.getX() + "=" + ib.getY());//開始拋物線動畫組合AnimationSet animationSet = new AnimationSet(false);TranslateAnimation translateAnimationX = new TranslateAnimation(Animation.ABSOLUTE, 0F, Animation.ABSOLUTE, carLocation[0] - outLocation[0], Animation.ABSOLUTE, 0.0f, Animation.ABSOLUTE, 0.0f);TranslateAnimation translateAnimationY = new TranslateAnimation(Animation.ABSOLUTE, 0F, Animation.ABSOLUTE, 0.0f, Animation.ABSOLUTE, 0.0f, Animation.ABSOLUTE, carLocation[1] - outLocation[1]);//Y軸增加加速效果translateAnimationY.setInterpolator(new AccelerateInterpolator());animationSet.addAnimation(translateAnimationX);animationSet.addAnimation(translateAnimationY);animationSet.setDuration(1500);//開始執行動畫ib.startAnimation(animationSet);//設置動畫結束的監聽animationSet.setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {//動畫結束,移除動畫new Handler().post(new Runnable() {@Overridepublic void run() {//方法一: // ((ViewGroup) ib.getParent()).removeView(ib);//方法二:flContainer.removeView(ib);}});}@Overridepublic void onAnimationRepeat(Animation animation) {}});}private void initView() {ibAdd = findViewById(R.id.ib_add);imgCart = findViewById(R.id.imgCart);flContainer = findViewById(R.id.fl_Container);}/*** 獲取狀態欄高度*/public int getStatusBarHeight() {Resources resources = getResources();int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");return resources.getDimensionPixelSize(resourceId);} }如果覺得看不懂,可以點擊下載源碼查看:
源碼頁代碼查看
整個項目源碼下載
總結
以上是生活随笔為你收集整理的Android开发之购物车添加商品实现抛物线动画的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android开发之fragment传递
- 下一篇: 如何用万用表判断一个12V蓄电池是否没电