Android 动画的插值器 (Interpolator属性)
生活随笔
收集整理的這篇文章主要介紹了
Android 动画的插值器 (Interpolator属性)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Interpolator(插值器): 屬性是設置動畫的速度變化的
Interpolator(插值器)的使用方法:
兩種方式:在XML 和Java代碼中 方法有9中 都是內置的構造方法所以在java代碼中使用的時候new 一下 就行了,
不過還是需要知道每個屬性的作用下面羅列出來
在java 代碼中:
animation.setInterpolator(new AccelerateInterpolator()); // 設置動畫為加速動畫(動畫播放中越來越快)animation.setInterpolator(new DecelerateInterpolator()); // 設置動畫為減速動畫(動畫播放中越來越慢)animation.setInterpolator(new AccelerateDecelerateInterpolator()); // 設置動畫為先加速在減速(開始速度最快 逐漸減慢)animation.setInterpolator(new AnticipateInterpolator());// 先反向執行一段,然后再加速反向回來(相當于我們彈簧,先反向壓縮一小段,然后在加速彈出)animation.setInterpolator(new AnticipateOvershootInterpolator());// 同上先反向一段,然后加速反向回來,執行完畢自帶回彈效果(更形象的彈簧效果)animation.setInterpolator(new BounceInterpolator()); // 執行完畢之后會回彈跳躍幾段(相當于我們高空掉下一顆皮球,到地面是會跳動幾下)animation.setInterpolator(new CycleInterpolator(2)); // 循環,動畫循環一定次數,值的改變為一正弦函數:Math.sin(2* mCycles* Math.PI* input)animation.setInterpolator(new LinearInterpolator()); // 線性均勻改變animation.setInterpolator(new OvershootInterpolator()); // 加速執行,結束之后回彈
在xml 中
android:interpolator="@android:anim/accelerate_interpolator" 設置動畫為加速動畫(動畫播放中越來越快)android:interpolator="@android:anim/decelerate_interpolator" 設置動畫為減速動畫(動畫播放中越來越慢)android:interpolator="@android:anim/accelerate_decelerate_interpolator" 設置動畫為先加速在減速(開始速度最快 逐漸減慢)android:interpolator="@android:anim/anticipate_interpolator" 先反向執行一段,然后再加速反向回來(相當于我們彈簧,先反向壓縮一小段,然后在加速彈出)android:interpolator="@android:anim/anticipate_overshoot_interpolator" 同上先反向一段,然后加速反向回來,執行完畢自帶回彈效果(更形象的彈簧效果)android:interpolator="@android:anim/bounce_interpolator" 執行完畢之后會回彈跳躍幾段(相當于我們高空掉下一顆皮球,到地面是會跳動幾下)android:interpolator="@android:anim/cycle_interpolator" 循環,動畫循環一定次數,值的改變為一正弦函數:Math.sin(2* mCycles* Math.PI* input)android:interpolator="@android:anim/linear_interpolator" 線性均勻改變android:interpolator="@android:anim/overshoot_interpolator" 加速執行,結束之后回彈
下面在java 代碼中對各個屬性試下效果
java 代碼:
public class MainActivity extends AppCompatActivity {private Animation accelerateInterpolator;private Animation decelerateInterpolator;private Animation accelerateDecelerateInterpolator;private Animation anticipateInterpolator;private Animation anticipateOvershootInterpolator;private Animation bounceInterpolator;private Animation cycleInterpolator;private Animation linearInterpolator;private Animation overshootInterpolator;private TextView accelerateInterpolatortv;private TextView decelerateInterpolatortv;private TextView accelerateDecelerateInterpolatortv;private TextView anticipateInterpolatortv;private TextView anticipateOvershootInterpolatortv;private TextView bounceInterpolatortv;private TextView cycleInterpolatortv;private TextView linearInterpolatortv;private TextView overshootInterpolatortv;@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);accelerateInterpolatortv = findViewById(R.id.accelerateInterpolatortv);decelerateInterpolatortv = findViewById(R.id.decelerateInterpolatortv);accelerateDecelerateInterpolatortv = findViewById(R.id.accelerateDecelerateInterpolatortv);anticipateInterpolatortv = findViewById(R.id.anticipateInterpolatortv);anticipateOvershootInterpolatortv = findViewById(R.id.anticipateOvershootInterpolatortv);bounceInterpolatortv = findViewById(R.id.bounceInterpolatortv);cycleInterpolatortv = findViewById(R.id.cycleInterpolatortv);linearInterpolatortv = findViewById(R.id.linearInterpolatortv);overshootInterpolatortv = findViewById(R.id.overshootInterpolatortv);// 設置動畫為加速動畫(動畫播放中越來越快)accelerateInterpolator =AnimationUtils.loadAnimation(MainActivity.this, R.anim.sacle_shape);accelerateInterpolator.setInterpolator(new AccelerateInterpolator());// 設置動畫為減速動畫(動畫播放中越來越慢)decelerateInterpolator =AnimationUtils.loadAnimation(MainActivity.this, R.anim.sacle_shape);decelerateInterpolator.setInterpolator(new DecelerateInterpolator());// 設置動畫為先加速在減速(開始速度最快 逐漸減慢)accelerateDecelerateInterpolator =AnimationUtils.loadAnimation(MainActivity.this, R.anim.sacle_shape);accelerateDecelerateInterpolator.setInterpolator(new AccelerateDecelerateInterpolator());// 先反向執行一段,然后再加速反向回來(相當于我們彈簧,先反向壓縮一小段,然后在加速彈出)anticipateInterpolator =AnimationUtils.loadAnimation(MainActivity.this, R.anim.sacle_shape);anticipateInterpolator.setInterpolator(new AnticipateInterpolator());// 同上先反向一段,然后加速反向回來,執行完畢自帶回彈效果(更形象的彈簧效果)anticipateOvershootInterpolator = AnimationUtils.loadAnimation(MainActivity.this,R.anim.sacle_shape);anticipateOvershootInterpolator.setInterpolator(new AnticipateOvershootInterpolator());// 執行完畢之后會回彈跳躍幾段(相當于我們高空掉下一顆皮球,到地面是會跳動幾下)bounceInterpolator = AnimationUtils.loadAnimation(MainActivity.this, R.anim.sacle_shape);bounceInterpolator.setInterpolator(new BounceInterpolator());// 循環,動畫循環一定次數,值的改變為一正弦函數:Math.sin(2* mCycles* Math.PI* input)cycleInterpolator = AnimationUtils.loadAnimation(MainActivity.this, R.anim.sacle_shape);cycleInterpolator.setInterpolator(new CycleInterpolator(2));// 線性均勻改變linearInterpolator = AnimationUtils.loadAnimation(MainActivity.this, R.anim.sacle_shape);linearInterpolator.setInterpolator(new LinearInterpolator());// 加速執行,結束之后回彈overshootInterpolator = AnimationUtils.loadAnimation(MainActivity.this, R.anim.sacle_shape);overshootInterpolator.setInterpolator(new OvershootInterpolator());findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {accelerateInterpolatortv.startAnimation(accelerateInterpolator);decelerateInterpolatortv.startAnimation(decelerateInterpolator);accelerateDecelerateInterpolatortv.startAnimation(accelerateDecelerateInterpolator);anticipateInterpolatortv.startAnimation(anticipateInterpolator);anticipateOvershootInterpolatortv.startAnimation(anticipateOvershootInterpolator);bounceInterpolatortv.startAnimation(bounceInterpolator);cycleInterpolatortv.startAnimation(cycleInterpolator);linearInterpolatortv.startAnimation(linearInterpolator);overshootInterpolatortv.startAnimation(overshootInterpolator);}});}}
anim 文件下的sacle_shape 寫了一個平移的效果
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="3000"android:fillBefore="true"android:fromXDelta="0"android:fromYDelta="0"android:toXDelta="800"android:toYDelta="0" />
</set>
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"android:orientation="vertical"tools:context=".MainActivity"><TextViewandroid:id="@+id/accelerateInterpolatortv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="AccelerateInterpolator"android:textColor="@android:color/holo_red_dark"android:textSize="20sp" /><TextViewandroid:id="@+id/decelerateInterpolatortv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="decelerateInterpolator"android:textColor="@android:color/holo_red_dark"android:textSize="20sp" /><TextViewandroid:id="@+id/accelerateDecelerateInterpolatortv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="AccelerateDecelerateInterpolator"android:textColor="@android:color/holo_red_dark"android:textSize="20sp" /><TextViewandroid:id="@+id/anticipateInterpolatortv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="AnticipateInterpolator"android:textColor="@android:color/holo_red_dark"android:textSize="20sp" /><TextViewandroid:id="@+id/anticipateOvershootInterpolatortv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="AnticipateOvershootInterpolator"android:textColor="@android:color/holo_red_dark"android:textSize="20sp" /><TextViewandroid:id="@+id/bounceInterpolatortv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="BounceInterpolator"android:textColor="@android:color/holo_red_dark"android:textSize="20sp" /><TextViewandroid:id="@+id/cycleInterpolatortv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="CycleInterpolator"android:textColor="@android:color/holo_red_dark"android:textSize="20sp" /><TextViewandroid:id="@+id/linearInterpolatortv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="LinearInterpolator"android:textColor="@android:color/holo_red_dark"android:textSize="20sp" /><TextViewandroid:id="@+id/overshootInterpolatortv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="OvershootInterpolator"android:textColor="@android:color/holo_red_dark"android:textSize="20sp" /><Buttonandroid:id="@+id/btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="開始" /></LinearLayout>
上面9中方法如果感覺不滿足需求,可以自定義插值器 (Interpolator屬性)
總結
以上是生活随笔為你收集整理的Android 动画的插值器 (Interpolator属性)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一两银子多少钱啊?
- 下一篇: github 删除工程的操作