附加Ken Burns特效的幻灯片
生活随笔
收集整理的這篇文章主要介紹了
附加Ken Burns特效的幻灯片
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Ken Burns特效只不過是視頻產品中使用的一種平移和縮放靜態圖片的特效。效果如下:
要實現上述功能,需要使用Jake Wharton開發的Nine Old Androids庫。這個庫可以讓開發者在舊版本上使用Android3.0的動畫API。
要創建Ken Burns特效,需要預設一些動畫。這些動畫將隨機應用到ImageView,當一個動畫顯示完畢,就開始顯示另一個動畫和圖片。
Activity代碼如下:
package com.example.huangfei.hack1;import android.app.Activity; import android.os.Bundle; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView;import com.nineoldandroids.animation.Animator; import com.nineoldandroids.animation.AnimatorSet; import com.nineoldandroids.animation.ObjectAnimator; import com.nineoldandroids.view.animation.AnimatorProxy;import java.util.Random;public class MainActivity extends Activity implements Animator.AnimatorListener {private static final int ANIM_COUNT = 4;private static final int[] PHOTOS = new int[]{R.drawable.photo1,R.drawable.photo2, R.drawable.photo3, R.drawable.photo4,R.drawable.photo5, R.drawable.photo6};private FrameLayout mContainer;private ImageView mImageView;private Random mRandom = new Random();private int mIndex = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//創建布局容器mContainer = new FrameLayout(this);mContainer.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));mImageView = createNewView();mContainer.addView(mImageView);setContentView(mContainer);}@Overrideprotected void onResume() {super.onResume();nextAnimation();}/*** 創建新的ImageView*/private ImageView createNewView() {ImageView imageView = new ImageView(this);imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));imageView.setScaleType(ImageView.ScaleType.FIT_XY);//設置要顯示的圖片并設置下一個要顯示的圖片的索引imageView.setImageResource(PHOTOS[mIndex]);mIndex = ++mIndex % PHOTOS.length;return imageView;}/*** 該方法負責設置動畫并啟動動畫*/private void nextAnimation() {AnimatorSet anim = new AnimatorSet();//產生0-4的隨機整數int index = mRandom.nextInt(ANIM_COUNT);//隨機選擇動畫switch (index) {case 0://縮放動畫anim.playTogether(ObjectAnimator.ofFloat(mImageView, "scaleX", 1.5f, 1f),ObjectAnimator.ofFloat(mImageView, "scaleY", 1.5f, 1f));break;case 1:anim.playTogether(ObjectAnimator.ofFloat(mImageView, "scaleX", 1f, 1.5f),ObjectAnimator.ofFloat(mImageView, "scaleY", 1f, 1.5f));break;case 2://位移動畫/*** AnimatorProxy是定義在Nine Old Androids庫中的類,用于修改View的屬性。這個新的動畫框架的* 基礎是:視圖的屬性隨著時間的推移可以改變。之所以使用AnimatorProxy,是因為在Android3.0以* 下版本,有些屬性沒有getters/setters方法。*/AnimatorProxy.wrap(mImageView).setScaleX(1.5f);AnimatorProxy.wrap(mImageView).setScaleY(1.5f);anim.playTogether(ObjectAnimator.ofFloat(mImageView, "translationY", 80f, 0f));break;case 3:default:AnimatorProxy.wrap(mImageView).setScaleX(1.5f);AnimatorProxy.wrap(mImageView).setScaleY(1.5f);anim.playTogether(ObjectAnimator.ofFloat(mImageView, "translationX", 0f, 40f));break;}//設置動畫持續時間,設置動畫監聽器,啟動動畫anim.setDuration(3000);anim.addListener(this);anim.start();}@Overridepublic void onAnimationStart(Animator animator) {}@Overridepublic void onAnimationEnd(Animator animator) {//動畫結束時,從布局中移除之前的View,并添加新的View,而后開始顯示下一個動畫mContainer.removeView(mImageView);mImageView = createNewView();mContainer.addView(mImageView);nextAnimation();}@Overridepublic void onAnimationCancel(Animator animator) {}@Overridepublic void onAnimationRepeat(Animator animator) {} }在上面的示例中,當切換視圖時,我們也可以添加透明漸變動畫(alpha animation)并且添加一個AnimationSet同時顯示平移和縮放動畫。可以從Nine Old Androids庫的示例代碼中獲得更多啟發。
新的動畫API通常可以比舊的API實現更多潛在的功能。以下是新的API一些改進的簡短列表:
1、舊版本的API只支持視圖對象的動畫效果。
2、舊版本的API僅限于移動、旋轉、縮放、漸變等效果。
3、舊版本的API只改變視圖移動時的視覺效果,并未改變其真實位置屬性。
代碼地址
總結
以上是生活随笔為你收集整理的附加Ken Burns特效的幻灯片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 心形公式表白(逼格更高一点哈哈哈)
- 下一篇: CS5265的Type-C转HDMI2.