一.三種安卓動畫
成都創(chuàng)新互聯(lián)始終致力于在企業(yè)網(wǎng)站建設(shè)領(lǐng)域發(fā)展。秉承“創(chuàng)新、求實、誠信、拼搏”的企業(yè)精神,致力為企業(yè)提供全面的網(wǎng)絡(luò)宣傳與技術(shù)應用整體策劃方案,為企業(yè)提供包括“網(wǎng)站建設(shè)、成都響應式網(wǎng)站建設(shè)、手機網(wǎng)站建設(shè)、微信網(wǎng)站建設(shè)、微信平臺小程序開發(fā)、商城網(wǎng)站開發(fā)、平臺網(wǎng)站建設(shè)秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。1. Tween Animation(補間動畫、視圖動畫):通過對場景里的對象不斷做圖像變換(平移、縮放、旋轉(zhuǎn))產(chǎn)生的動畫效果,即是一種漸變動畫。
2. Frame Animation(幀動畫):順序播放事先做好的圖像,是一種畫面轉(zhuǎn)換動畫。
3. Property Animation:屬性動畫,通過動態(tài)地改變對象的屬性從而達到動畫效果,屬性動畫為API 11新特性。
二.屬性動畫的優(yōu)點
1.屬性動畫是通過閾值器來調(diào)整的,可以高效完成簡單的動畫效果,從而節(jié)約內(nèi)存空間。
2.對比幀動畫,是通過圖片的切換來實現(xiàn)動畫效果的,可以實現(xiàn)復雜的動畫效果但是非常耗內(nèi)存。
3.屬性動畫多用于控件的狀態(tài)變化,而幀動畫用于展現(xiàn)復雜且連續(xù)的圖片,比如短視頻等。
三.屬性動畫實例
1.效果展示
2.關(guān)鍵代碼?
.xml布局文件,采用線性布局,四個button和一個image
MainActive代碼
(1)moveView方法,修改view的位置,后續(xù)可調(diào)用該方法設(shè)置起始坐標及寬高
private void moveView(View view, int rawX, int rawY) { int left = rawX - view.getWidth() / 2; int top = rawY - view.getHeight(); int weight = left + view.getWidth(); int height = top + view.getHeight(); view.layout(left, top, weight, height); }
(2)動畫的實現(xiàn)
按鈕1,直線移動代碼實現(xiàn)
@Override public void onClick(View view) { //獲取總布局的寬和高 int width = ly_root.getWidth(); int height = ly_root.getHeight(); ValueAnimator va = ValueAnimator.ofInt(height, 0, height / 4, height / 2, height / 4 * 3, height); va.setDuration(3000l); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { int x = width / 2; int y = (int) va.getAnimatedValue(); moveView(img_babi, x, y); } }); va.setInterpolator(new LinearInterpolator()); va.start(); }
按鈕二,縮放
@Override public void onClick(View view) { final float scale = 0.5f; AnimatorSet scaleSet = new AnimatorSet(); ValueAnimator vaSmall = ValueAnimator.ofFloat(1.0f, scale); vaSmall.setDuration(500); ValueAnimator vaLarge = ValueAnimator.ofFloat(scale, 1.0f); vaLarge.setDuration(500); vaSmall.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { float scale = (float) valueAnimator.getAnimatedValue(); img_babi.setScaleX(scale); img_babi.setScaleY(scale); } }); vaLarge.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { float scale = (float) valueAnimator.getAnimatedValue(); img_babi.setScaleX(scale); img_babi.setScaleY(scale); } }); scaleSet.play(vaLarge).after(vaSmall); scaleSet.start(); }
按鈕三,旋轉(zhuǎn)
@Override public void onClick(View view) { int width = ly_root.getWidth(); int height = ly_root.getHeight(); final int R = width / 4; ValueAnimator va = ValueAnimator.ofFloat(0, (float) (2.0f * Math.PI)); va.setDuration(1000); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { float t = (float) valueAnimator.getAnimatedValue(); int x = (int) (R * Math.sin(t) + width / 2); int y = (int) (R * Math.cos(t) + height / 2); moveView(img_babi, x, y); } }); va.setInterpolator(new DecelerateInterpolator()); va.start(); }
按鈕四,圓形旋轉(zhuǎn)
@Override public void onClick(View view) { ValueAnimator va = ValueAnimator.ofInt(0, 360); va.setDuration(1000l); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { int rotate = (Integer) valueAnimator.getAnimatedValue(); img_babi.setRotation(rotate); float fractionValue = valueAnimator.getAnimatedFraction(); img_babi.setAlpha(fractionValue); } }); va.setInterpolator(new DecelerateInterpolator()); va.start(); }
3.代碼功能總結(jié)
ofFloat,ofInt方法用來創(chuàng)建ValueAnimator實例
set...方法可以用來設(shè)置動畫持續(xù)時間等
start()方法可以開啟動畫
原文鏈接:
guoguoguoyaonuli
http://t.csdn.cn/vzwEj
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧