Tween动画的实现
来源:互联网 发布:suse linux 开启端口 编辑:程序博客网 时间:2024/09/21 09:26
android 中 Tween动画主要是对图片进行平移、旋转、缩放、渐变。下面通过自定义一个View来实现这些功能。
import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Point;import android.util.AttributeSet;import android.util.Log;import android.view.animation.AlphaAnimation;import android.view.animation.Animation;import android.view.animation.Animation.AnimationListener;import android.view.animation.AnimationSet;import android.view.animation.RotateAnimation;import android.view.animation.ScaleAnimation;import android.view.animation.TranslateAnimation;import android.widget.AbsoluteLayout;import android.widget.ImageView;@SuppressWarnings("deprecation")public class AnimationView extends AbsoluteLayout{private static final int VIEW_COUNTS = 8;private static final long ANIM_DURATION = 1000;private static final long DELAY_DURATION = 500;private int childLength = 80;private boolean isInitialized = false;private boolean isRunning = false;private Bitmap bm;private Point[] mStartPoints = new Point[VIEW_COUNTS];private Point mReachPoint = new Point();private ImageView[] mAnimViews = new ImageView[VIEW_COUNTS];private AnimationSet[] mAnimationArray = new AnimationSet[VIEW_COUNTS];public AnimationView(Context context, AttributeSet attrs) { super(context,attrs); }//开始动画public void startAnim(int index) {if (!isInitialized) {initView();}isRunning = true;if (index >=0 ) {mAnimViews[index].startAnimation(mAnimationArray[index]);} else {for (int i = 0; i < VIEW_COUNTS; i++) {mAnimViews[i].startAnimation(mAnimationArray[i]);}}}//结束动画public void stopAnim() {isRunning = false;}//初始化控件private void initView() {bm = getAnimBitmap();loadAnimStartLocation();loadAnimReachLocation();for (int i = 0; i < VIEW_COUNTS; i++) {mAnimViews[i] = createAnimView(i);mAnimationArray[i] = createAnimation(i);mAnimationArray[i].setAnimationListener(new AnimListener(i));}isInitialized = true;}private AnimationSet createAnimation(int i) {AnimationSet anim = new AnimationSet(true);Point mStart = mStartPoints[i];//旋转动画RotateAnimation ra = new RotateAnimation(0F, 719F,Animation.RELATIVE_TO_SELF, 0.5F, Animation.RELATIVE_TO_SELF,0.5F);anim.setDuration(400);//平移动画TranslateAnimation ta = new TranslateAnimation(0, mReachPoint.x- mStart.x-childLength, 0, mReachPoint.y - mStart.y-childLength);ta.setDuration(400);//放大动画ScaleAnimation sa = new ScaleAnimation(0.5F, 2F, 0.5F, 2F);sa.setDuration(400);sa.setStartOffset(DELAY_DURATION * (i + 1)/2);//设置透明度渐变动画AlphaAnimation aa = new AlphaAnimation(1.0F, 0F);aa.setDuration(400);aa.setStartOffset(DELAY_DURATION * (i + 1)/2);anim.addAnimation(ra);anim.addAnimation(sa);anim.addAnimation(ta);anim.addAnimation(aa);anim.setDuration(ANIM_DURATION * (i + 1));anim.setFillAfter(true);return anim;}//设置图片private ImageView createAnimView(int index) {ImageView anim = new ImageView(getContext());anim.setImageBitmap(bm);addView(anim, new LayoutParams(childLength, childLength, mStartPoints[index].x,mStartPoints[index].y));return anim;}//从资源中取图片private Bitmap getAnimBitmap() {Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);return bm;}//长方形的4个顶点private void loadAnimStartLocation() {mStartPoints[0] = new Point(0, 0);mStartPoints[1] = new Point(0,getHeight()/2);mStartPoints[2] = new Point(0, getHeight());mStartPoints[3] = new Point(getWidth()/2,getHeight());mStartPoints[4] = new Point(getWidth(), getHeight());mStartPoints[5] = new Point(getWidth(), getHeight()/2);mStartPoints[6] = new Point(getWidth(), 0);mStartPoints[7] = new Point(getWidth()/2, 0);}//中心点private void loadAnimReachLocation() {mReachPoint = new Point(getWidth()/2, getHeight()/2);}//当view的大小发生变化时触发@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);startAnim(-1);}//动画的运行的监听class AnimListener implements AnimationListener {private int index;public AnimListener(int index) {this.index = index;}@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {postDelayed(new Runnable() {@Overridepublic void run() {if (isRunning) {startAnim(index);}}}, 200);}@Overridepublic void onAnimationRepeat(Animation animation) {}}}
0 0
- Tween动画的实现
- Android的Tween动画的实现框架
- Android的Tween动画的实现框架
- Android的Tween动画的实现框架
- 分析了 Tween 动画的实现原理
- 补间动画(Tween)的实现
- android补间动画(Tween)的实现
- 补间动画(Tween)的实现
- Tween动画实现过程
- android动画模块 Tween 动画的实现原理 详解
- 简单的Tween动画
- AndroidのTween动画实现
- Tween动画 xml文件实现
- Android游戏开发之Tween动画的实现(三十二)
- android Tween Animations(动画效果-代码实现)的使用
- Android开发(26)--补间动画(Tween)的实现
- Android学习笔记14:Tween Animation动画的实现
- Android开发(26)--补间动画(Tween)的实现
- android--系统jar包引用
- OGG 11.2.1.0.1安装过程及问题解决
- 云计算大行其道 变革传统IT服务
- SEO实战:蛋糕原理,抓住核心关键词
- Introduction to VMware vCloud Suite Services ----介绍VMware vCloud Services
- Tween动画的实现
- 2015年电视游戏大厅将逐一死掉?
- Spring事务配置的五种方式
- iOS开发之GCD(3)Main Dispatch Queue/Global Dispatch Queue
- 动态规划解数字三角形
- Web、HTTP协议工作机制GOOD
- 数组写到excel保存
- 3-16
- AJAX+JQUERY