Android積分簽到上移消失動(dòng)畫(huà)效果
還記得以前在某云的時(shí)候,有次需求是一個(gè)積分簽到,要求點(diǎn)擊簽到按鈕然后有一個(gè)動(dòng)畫(huà)效果,比如+30積分然后慢慢往上移動(dòng)在消失。那會(huì)不會(huì)做就想著改下需求,直接去掉了動(dòng)畫(huà)效果,而今時(shí)隔很久又遇到同樣的問(wèn)題,比較蛋疼的是我清楚記得當(dāng)時(shí)做過(guò)這個(gè)功能,但是自己沒(méi)有做出來(lái),當(dāng)然現(xiàn)在做還是不會(huì)。自己當(dāng)年省寫的代碼含淚也要補(bǔ)上。這次吸取教訓(xùn),實(shí)現(xiàn)這個(gè)效果。

大致思路:動(dòng)畫(huà)部分,由一個(gè)垂直的平移和一個(gè)透明度變化的兩個(gè)動(dòng)畫(huà)組成。然后通過(guò)AnimationSet將兩個(gè)動(dòng)畫(huà)添加到集合,然后開(kāi)始播放動(dòng)畫(huà)。
更新UI部分,用的是Handler發(fā)送消息更新UI
下面看代碼:
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);//圓點(diǎn)隱藏
// start平移和漸變動(dòng)畫(huà)
signSuccess.startAnimation(set);
signSuccess.setVisibility(View.GONE);
textView.setText("當(dāng)前積分:"+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);//顯示未簽到的紅圓點(diǎn)
textView = (TextView) findViewById(R.id.tv_score);//積分
//簽到添加積分動(dòng)畫(huà)文本
signSuccess = (TextView) findViewById(R.id.iv_sign_success);
// 獲取簽到成功圖片的位置
int left = signSuccess.getLeft();
int top = signSuccess.getTop();
// 創(chuàng)建平移和漸變的動(dòng)畫(huà)集合
// 定義一個(gè)平移動(dòng)畫(huà)對(duì)象
TranslateAnimation translate = new TranslateAnimation(left, left, top, top - 100);
translate.setDuration(2000);
//translate.setRepeatCount(1);
// 漸變動(dòng)畫(huà)
AlphaAnimation alpha = new AlphaAnimation(1, 0);
alpha.setDuration(2000);
alpha.setFillAfter(true);
// 創(chuàng)建動(dòng)畫(huà)集合,將平移動(dòng)畫(huà)和漸變動(dòng)畫(huà)添加到集合中,一起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);
接收四個(gè)參數(shù),我們點(diǎn)擊去看他的源碼
/**
* 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),從參數(shù)字面意思都能理解,在結(jié)合我們傳遞進(jìn)去的參數(shù),就是水平?jīng)]有變化,垂直位移。
AlphaAnimation alpha = new AlphaAnimation(1, 0);
是透明度變化1代表不透明,0代表完全透明,取值float
為了顯示效果這里可以多次點(diǎn)擊,實(shí)際項(xiàng)目中是點(diǎn)擊簽到一般是只能點(diǎn)擊一次。這個(gè)需要注意一下修改。
相關(guān)文章
Android檢查網(wǎng)絡(luò)狀態(tài)工具類詳解
這篇文章主要為大家詳細(xì)介紹了Android檢查網(wǎng)絡(luò)狀態(tài)工具類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
基于Android實(shí)現(xiàn)桌面懸浮清內(nèi)存app概述
最近沒(méi)有項(xiàng)目做,于是寫了個(gè)小程序練練手,android桌面懸浮清內(nèi)存app概述,感興趣的朋友一起學(xué)習(xí)吧2015-12-12
Android開(kāi)發(fā)筆記之:消息循環(huán)與Looper的詳解
本篇文章是對(duì)Android中消息循環(huán)與Looper的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
Android開(kāi)發(fā)中簡(jiǎn)單設(shè)置啟動(dòng)界面的方法
這篇文章主要介紹了Android開(kāi)發(fā)中簡(jiǎn)單設(shè)置啟動(dòng)界面的方法,涉及Android界面布局、加載、跳轉(zhuǎn)等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
Android仿微信和QQ多圖合并框架(類似群頭像)的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Android仿微信和QQ多圖合并框架的相關(guān)資料,其實(shí)就是我們平時(shí)所見(jiàn)的群聊頭像,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位Android開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
Android開(kāi)發(fā)實(shí)現(xiàn)錄屏小功能
這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)錄屏小功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
解決AMD無(wú)法使用Android studio問(wèn)題
這篇文章主要介紹了AMD無(wú)法使用Android studio解決方法,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
Android Mms之:對(duì)話與聯(lián)系人關(guān)聯(lián)的總結(jié)詳解
本篇文章是對(duì)Android中對(duì)話與聯(lián)系人的關(guān)聯(lián)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
Android性能調(diào)優(yōu)利器StrictMode應(yīng)用分析
StrictMode意思為嚴(yán)格模式,是用來(lái)檢測(cè)程序中違例情況的開(kāi)發(fā)者工具。最常用的場(chǎng)景就是檢測(cè)主線程中本地磁盤和網(wǎng)絡(luò)讀寫等耗時(shí)的操作。這篇文章給大家介紹Android性能調(diào)優(yōu)利器StrictMode應(yīng)用分析,感興趣的朋友一起看看吧2018-01-01
Android 實(shí)現(xiàn)自動(dòng)打電話與發(fā)短信的實(shí)例
這篇文章主要介紹了Android 實(shí)現(xiàn)自動(dòng)打電話與發(fā)短信的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05

