一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - Android - Android積分簽到上移消失動畫效果

Android積分簽到上移消失動畫效果

2022-02-20 15:16帥氣大果果 Android

這篇文章主要介紹了Android積分簽到上移消失動畫效果大致思路:動畫部分,由一個垂直的平移和一個透明度變化的兩個動畫組成。然后通過AnimationSet將兩個動畫添加到集合,然后開始播放動畫。

還記得以前在某云的時候,有次需求是一個積分簽到,要求點擊簽到按鈕然后有一個動畫效果,比如+30積分然后慢慢往上移動在消失。那會不會做就想著改下需求,直接去掉了動畫效果,而今時隔很久又遇到同樣的問題,比較蛋疼的是我清楚記得當時做過這個功能,但是自己沒有做出來,當然現在做還是不會。自己當年省寫的代碼含淚也要補上。這次吸取教訓,實現這個效果。

Android積分簽到上移消失動畫效果

大致思路:動畫部分,由一個垂直的平移和一個透明度變化的兩個動畫組成。然后通過AnimationSet將兩個動畫添加到集合,然后開始播放動畫。

 更新UI部分,用的是Handler發送消息更新UI

下面看代碼:

?
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
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.AnimationSet;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
 private ImageView mSignIn;
 private ImageView redDot;
 private TextView signSuccess;
 private AnimationSet set;
 private String isSign;
 private TextView textView;
 private Handler mHandler = new Handler() {
 private int i=100;
 public void handleMessage(android.os.Message msg) {
  switch (msg.what) {
  case 1:// 簽到
   i = i+100;
   mSignIn.setImageResource(R.drawable.icon_signed);//已簽到
   redDot.setVisibility(View.GONE);//圓點隱藏
   // start平移和漸變動畫
   signSuccess.startAnimation(set);
   signSuccess.setVisibility(View.GONE);
   textView.setText("當前積分:"+i);
   // mSignIn.setClickable(false);
   break;
 
  default:
   break;
  }
 }
 };
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 
 mSignIn = (ImageView) findViewById(R.id.iv_sign);//簽到
 redDot = (ImageView) findViewById(R.id.iv_redpoint);//顯示未簽到的紅圓點
 textView = (TextView) findViewById(R.id.tv_score);//積分
 //簽到添加積分動畫文本
 signSuccess = (TextView) findViewById(R.id.iv_sign_success);
 //  獲取簽到成功圖片的位置
 int left = signSuccess.getLeft();
 int top = signSuccess.getTop();
 // 創建平移和漸變的動畫集合
 // 定義一個平移動畫對象
 TranslateAnimation translate = new TranslateAnimation(left, left, top, top - 100);
 translate.setDuration(2000);
 //translate.setRepeatCount(1);
 // 漸變動畫
 AlphaAnimation alpha = new AlphaAnimation(1, 0);
 alpha.setDuration(2000);
 alpha.setFillAfter(true);
 // 創建動畫集合,將平移動畫和漸變動畫添加到集合中,一起start
 set = new AnimationSet(false);
 set.addAnimation(translate);
 set.addAnimation(alpha);
 }
 /**
 * 簽到
 * @param v
 */
 public void signIn(View v) {
   // if (!TextUtils.isEmpty(isSign)) {
    // if ("0".equals(isSign)) {// 0代表未簽到
    signSuccess.setVisibility(View.VISIBLE);
    // mHandler.sendEmptyMessage(1);
    Message message = new Message();
    message.what = 1;
    mHandler.sendMessage(message);
    // }
   // }
 }
 
}

其中

TranslateAnimation translate = new TranslateAnimation(left, left, top, top - 100);

接收四個參數,我們點擊去看他的源碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
 * Constructor to use when building a TranslateAnimation from code
 *
 * @param fromXDelta Change in X coordinate to apply at the start of the
 * animation
 * @param toXDelta Change in X coordinate to apply at the end of the
 * animation
 * @param fromYDelta Change in Y coordinate to apply at the start of the
 * animation
 * @param toYDelta Change in Y coordinate to apply at the end of the
 * animation
 */
 public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) {
 mFromXValue = fromXDelta;
 mToXValue = toXDelta;
 mFromYValue = fromYDelta;
 mToYValue = toYDelta;
 }

看到了TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta),從參數字面意思都能理解,在結合我們傳遞進去的參數,就是水平沒有變化,垂直位移。

AlphaAnimation alpha = new AlphaAnimation(1, 0);

是透明度變化1代表不透明,0代表完全透明,取值float

為了顯示效果這里可以多次點擊,實際項目中是點擊簽到一般是只能點擊一次。這個需要注意一下修改。

源碼

原文鏈接:https://blog.csdn.net/qq_34471736/article/details/70326777

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 皇上好大好硬好涨好深好爽 | 特黄未满14周岁毛片 | 亚裔aⅴ艳星katsuni | 国产成人精品三级在线 | 日本亚洲欧洲高清有码在线播放 | 亚洲成在人网站天堂一区二区 | 亚洲国产欧美在线人成 | 2022国产麻豆剧传媒剧情 | 45分钟做受片免费观看 | 大乳孕妇一级毛片 | 色噜噜狠狠狠综合曰曰曰88av | 日噜噜| 精品久久久久久久国产潘金莲 | 国产精品成人麻豆专区 | 无码人妻少妇色欲AV一区二区 | 国产精品日韩欧美一区二区三区 | 日本人添下面的全过程 | 兽皇日本 | 潘金莲西门庆一级淫片aaaaaa | 特黄特色一级aa毛片免费观看 | 亚洲国产综合另类视频 | 日本网 | 天天色一色 | 性xxx免费视频 | 天堂伊人网 | 色天天综合网色鬼综合 | 男女乱淫真视频播放网站 | 处女摘花视频 | porno日本大学生高清 | 91交换论坛| 久久成人免费大片 | 精品人人视屏 | 倩女还魂在线观看完整版免费 | 91麻豆制片厂 | 欧美视频一区二区三区四区 | 蜜桃麻豆| 日本强不卡在线观看 | 欧美第一视频 | 99re8在这里只有精品23 | eeuss18影院www国产 | 69re在线观看 |