国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Android - Android仿天貓商品拋物線加入購物車動(dòng)畫

Android仿天貓商品拋物線加入購物車動(dòng)畫

2022-03-07 15:00Jeff169 Android

這篇文章主要為大家詳細(xì)介紹了Android仿天貓商品拋物線加入購物車動(dòng)畫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android仿天貓加入購物車的具體代碼,供大家參考,具體內(nèi)容如下

先上效果圖

Android仿天貓商品拋物線加入購物車動(dòng)畫

實(shí)現(xiàn)思路:

首先,我們需要三個(gè)Imagview

第一個(gè)是原商品圖片,  這個(gè)圖片是布局文件中創(chuàng)建的       我們稱作A

第二個(gè)是做動(dòng)畫的圖片 這個(gè)我們是在代碼中創(chuàng)建的     我們稱作B

第三個(gè)是購物車圖片   這個(gè)圖片是布局文件中創(chuàng)建的     我們稱作C

接著,我們需要將A圖片設(shè)置給B

A圖片一般是聯(lián)網(wǎng)獲取到的,給Imagview設(shè)置圖片有兩種方式

    如果是通過setBackgroundDrawable      那么就通過getBackground()獲取到Drawable對(duì)象,設(shè)置給B

    如果是通過setImageDrawable      那么就通過getDrawable()獲取到Drawable對(duì)象,設(shè)置給B

再接著   我們獲取到A的位置  作為動(dòng)畫開始的位置     獲取到C的位置    作為動(dòng)畫結(jié)束的位置

然后 創(chuàng)建動(dòng)畫圖層,開始執(zhí)行動(dòng)畫  

    這個(gè)動(dòng)畫集合中,包括:   水平位移勻速平移   豎直方向加速平移   縮放動(dòng)畫  

最后  一定不要忘了  為我們的動(dòng)畫集合添加監(jiān)聽set.setAnimationListener 

    動(dòng)畫執(zhí)行前讓Imagview 可見     動(dòng)畫執(zhí)行后讓Imagview 不可見

下邊是MainActivity中的代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
public class MainActivity extends Activity {
 
 private ImageView top;
 private ImageView bottom;
 private ImageView animImageView;
 private ViewGroup anim_mask_layout;// 動(dòng)畫層
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 top = (ImageView) findViewById(R.id.top);
 bottom = (ImageView) findViewById(R.id.bottom);
 
 }
 
 public void startAnim(View view) {
 // 記錄開始的位置
 int[] startLocation = new int[2];// 一個(gè)整型數(shù)組,用來存儲(chǔ)按鈕的在屏幕的X、Y坐標(biāo)
 top.getLocationInWindow(startLocation);// 這是獲取購買按鈕的在屏幕的X、Y坐標(biāo)(這也是動(dòng)畫開始的坐標(biāo))
 
 // 創(chuàng)建要做動(dòng)畫的ImageView
 animImageView = new ImageView(this);
 
 // 設(shè)置animImageView的背景
 Drawable background = top.getBackground();
 Drawable zoomDrawable = zoomDrawable(background, dip2Px(this, 200),
 dip2Px(this, 200));
 animImageView.setBackgroundDrawable(zoomDrawable);
 
 // 開始執(zhí)行動(dòng)畫
 setAnim(animImageView, startLocation, top);
 }
 
 /**
 * 設(shè)置動(dòng)畫
 *
 * @param v
 * @param startLocation
 * @param view
 */
 private void setAnim(final View v, int[] startLocation, final View view) {
 
 anim_mask_layout = null;
 anim_mask_layout = createAnimLayout();
 anim_mask_layout.addView(v);// 把動(dòng)畫小球添加到動(dòng)畫層
 final View viewa = addViewToAnimLayout(anim_mask_layout, v,
 startLocation);
 int[] endLocation = new int[2];// 存儲(chǔ)動(dòng)畫結(jié)束位置的X、Y坐標(biāo)
 bottom.getLocationInWindow(endLocation);// shopCart是那個(gè)購物車
 
 // 計(jì)算位移
 int endX = endLocation[0] - startLocation[0];// 動(dòng)畫位移的X坐標(biāo)
 int endY = endLocation[1] - startLocation[1];// 動(dòng)畫位移的y坐標(biāo)
 TranslateAnimation translateAnimationX = new TranslateAnimation(0,
 endX, 0, 0);
 translateAnimationX.setInterpolator(new LinearInterpolator());
 translateAnimationX.setRepeatCount(0);// 動(dòng)畫重復(fù)執(zhí)行的次數(shù)
 translateAnimationX.setFillAfter(true);
 
 TranslateAnimation translateAnimationY = new TranslateAnimation(0, 0,
 0, endY);
 translateAnimationY.setInterpolator(new AccelerateInterpolator());
 translateAnimationY.setRepeatCount(0);// 動(dòng)畫重復(fù)執(zhí)行的次數(shù)
 translateAnimationX.setFillAfter(true);
 
 ScaleAnimation scaleAnimation = new ScaleAnimation(0.6f, 0.1f,0.6f, 0.1f);
 scaleAnimation.setInterpolator(new AccelerateInterpolator());
 scaleAnimation.setRepeatCount(0);// 動(dòng)畫重復(fù)執(zhí)行的次數(shù)
 scaleAnimation.setFillAfter(true);
 
 AnimationSet set = new AnimationSet(false);
 set.setFillAfter(false);
 set.addAnimation(scaleAnimation);
 set.addAnimation(translateAnimationY);
 set.addAnimation(translateAnimationX);
 set.setDuration(600);// 動(dòng)畫的執(zhí)行時(shí)間
 viewa.startAnimation(set);
 // 動(dòng)畫監(jiān)聽事件
 set.setAnimationListener(new AnimationListener() {
 // 動(dòng)畫的開始
 @Override
 public void onAnimationStart(Animation animation) {
 v.setVisibility(View.VISIBLE);
 }
 
 @Override
 public void onAnimationRepeat(Animation animation) {
 }
 
 // 動(dòng)畫的結(jié)束
 @Override
 public void onAnimationEnd(Animation animation) {
 v.setVisibility(View.GONE);
 }
 });
 }
 
 /**
 * @Description: 創(chuàng)建動(dòng)畫層
 * @param
 * @return void
 * @throws
 */
 private ViewGroup createAnimLayout() {
 ViewGroup rootView = (ViewGroup) ((Activity) 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.setId(Integer.MAX_VALUE);
 animLayout.setBackgroundResource(android.R.color.transparent);
 rootView.addView(animLayout);
 return animLayout;
 }
 
 private View addViewToAnimLayout(final ViewGroup parent, 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;
 }
 
 /**
 * 將drawable對(duì)象進(jìn)行指定大小的縮放
 *
 * @param drawable
 * @param w
 * @param h
 * @return
 */
 public Drawable zoomDrawable(Drawable drawable, int w, int h) {
 int width = drawable.getIntrinsicWidth();
 int height = drawable.getIntrinsicHeight();
 Bitmap oldbmp = drawableToBitmap(drawable); // drawable 轉(zhuǎn)換成 bitmap
 Matrix matrix = new Matrix(); // 創(chuàng)建操作圖片用的 Matrix 對(duì)象
 float scaleWidth = ((float) w / width); // 計(jì)算縮放比例
 float scaleHeight = ((float) h / height);
 matrix.postScale(scaleWidth, scaleHeight); // 設(shè)置縮放比例
 Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height,
 matrix, true); // 建立新的 bitmap ,其內(nèi)容是對(duì)原 bitmap 的縮放后的圖
 return new BitmapDrawable(newbmp); // 把 bitmap 轉(zhuǎn)換成 drawable 并返回
 }
 
 /**
 * 將drawable 轉(zhuǎn)換成 bitmap
 *
 * @param drawable
 * @return
 */
 public Bitmap drawableToBitmap(Drawable drawable) {
 int width = drawable.getIntrinsicWidth(); // 取 drawable 的長(zhǎng)寬
 int height = drawable.getIntrinsicHeight();
 Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
 : Bitmap.Config.RGB_565; // 取 drawable 的顏色格式
 Bitmap bitmap = Bitmap.createBitmap(width, height, config); // 建立對(duì)應(yīng)
   // bitmap
 Canvas canvas = new Canvas(bitmap); // 建立對(duì)應(yīng) bitmap 的畫布
 drawable.setBounds(0, 0, width, height);
 drawable.draw(canvas); // 把 drawable 內(nèi)容畫到畫布中
 return bitmap;
 }
 
 // dp轉(zhuǎn)換為像素px
 public static int dip2Px(Context context, float dp) {
 final float scale = context.getResources().getDisplayMetrics().density;
 return (int) (dp * scale + 0.5f);
 }
}

下邊是布局文件中代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<RelativeLayout 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"
 tools:context="${relativePackage}.${activityClass}" >
 
 <ImageView
 android:id="@+id/top"
 android:layout_width="60dp"
 android:layout_height="60dp"
 android:background="@drawable/cart_product_img"
 android:onClick="startAnim"/>
 
 <ImageView
 android:id="@+id/bottom"
 android:layout_width="60dp"
 android:layout_height="60dp"
 android:layout_alignParentBottom="true"
 android:layout_alignParentRight="true"
 android:background="@drawable/gouwuche_ico" />
 
</RelativeLayout>

點(diǎn)擊這里下載源碼

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/Jeff169/article/details/51523916

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美日韩一区二区三区 | 欧美一区久久 | 日韩免费视频 | 亚洲国产区 | 欧美日韩免费一区二区三区 | 亚洲午夜精品视频 | 国产精品免费视频一区 | 亚洲乱码日产精品一二三 | 日韩成人片 | 成人免费视频网 | 在线视频亚洲 | 国产亚洲精品久久久久久久 | 欧美精品一区在线 | 人人爱夜夜爽日日视频 | 精品成人在线视频 | 久久久国产精品 | 免费精品 | 91麻豆蜜桃一区二区三区 | 伊人99综合| 美女久久 | 久在线视频| 亚洲 精品 综合 精品 自拍 | 美女在线一区 | 成人精品99 | 欧美视频在线播放 | 青草精品| av在线干| 欧美精品久久久久 | 欧美影| 国产精品99精品久久免费 | 亚洲午夜免费视频 | 欧美国产日韩一区 | 夜夜操操| 亚洲精品久久久久久久久久久久久 | 最新黄色网址在线播放 | 综合久久网| 色天堂视频 | 国产一区不卡 | 久久久久久久久久久九 | 午夜影院 | 亚洲伦理一区 |