Ken Burns 特效是视频产品中使用的一种平移和缩放静态图片的
特效

完成这个效果,需要第三方jar,这个可以在资源jar上下载

public class Hack08Activity 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 mView;    private Random mRandom = new Random();    private int mIndex = 0;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mContainer = new FrameLayout(this);        mContainer.setLayoutParams(new FrameLayout.LayoutParams(//创建布局容器                FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.FILL_PARENT));        mView = createNewView();        mContainer.addView(mView);//创建ImageView,并将其添加到布局容器中        setContentView(mContainer);    }    private ImageView createNewView() {        ImageView ret = new ImageView(this);        ret.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,                ViewGroup.LayoutParams.FILL_PARENT));        ret.setScaleType(ImageView.ScaleType.FIT_XY);        ret.setImageResource(PHOTOS[mIndex]);//设置要显示的图片,并设置下一个要显示的图片的索引        mIndex = (mIndex + 1 < PHOTOS.length) ? mIndex + 1 : 0;        return ret;    }    @Override    protected void onResume() {        super.onResume();        nextAnimation();    }    private void nextAnimation() {        AnimatorSet anim = new AnimatorSet();        final int index = mRandom.nextInt(ANIM_COUNT);//随机选择动画        switch (index) {            case 0:                anim.playTogether(                        ObjectAnimator.ofFloat(mView, "scaleX", 1.5f, 1f),//缩放动画                        ObjectAnimator.ofFloat(mView, "scaleY", 1.5f, 1f));                break;            case 1:                anim.playTogether(                        ObjectAnimator.ofFloat(mView, "scaleX", 1, 1.5f),                        ObjectAnimator.ofFloat(mView, "scaleY", 1, 1.5f));                break;            case 2:                //位移动画                AnimatorProxy.wrap(mView).setScaleX(1.5f);                AnimatorProxy.wrap(mView).setScaleY(1.5f);                anim.playTogether(ObjectAnimator.ofFloat(mView,                        "translationY", 80f, 0f));                break;            case 3:            default:                AnimatorProxy.wrap(mView).setScaleX(1.5f);                AnimatorProxy.wrap(mView).setScaleY(1.5f);                anim.playTogether(ObjectAnimator.ofFloat(mView,                        "translationX", 0f, 40f));                break;        }        //设置动画持续时间,设置动画监听器为当前Activity,启动动画        anim.setDuration(3000);        anim.addListener(this);        anim.start();    }    @Override    public void onAnimationCancel(Animator arg0) {    }    @Override    public void onAnimationEnd(Animator animator) {        //从布局容器中移除之前的 View,并添加新的 View        mContainer.removeView(mView);        mView = createNewView();        mContainer.addView(mView);        nextAnimation();//开始显示下一个动画    }    @Override    public void onAnimationRepeat(Animator arg0) {    }    @Override    public void onAnimationStart(Animator arg0) {    }}

更多相关文章

  1. Android(安卓)WebView 中遇到的问题集锦
  2. 【Android】AlertDialog与ListAdapter
  3. ListActivity的使用
  4. 【Android】通知的实现
  5. Android中AppWidget加载流程
  6. 2010.05.15学习日志
  7. android:自定义actionbar样式和布局
  8. android中,用SimpleAdapter创建有自己布局的listView,以及listView
  9. Android的Master/Detail风格界面中实现自定义ListView的单选

随机推荐

  1. Android HttpClient上传文件与Httpconnec
  2. 《Android Dev Guide》系列教程8:用户界面
  3. Android获取屏幕分辨率及DisplayMetrics
  4. 推荐--《Android深入浅出》
  5. Android系统架构-[Android取经之路]
  6. Android 自定义控件-SnakeLayout (仿galle
  7. Android studio获取证书指纹 (SHA1)的方
  8. Android命名规范,开发规范,注意点整理(一)
  9. Android通知系统源码解析
  10. Android 日历开发教程[三]