//小飞机旋转动效果
public class PlaneView extends View {private Paint paint;private int width;private int height;private float curLength;private float allLength;private float mAnimatorValue;private PathMeasure pathMeasure;private Path path;private float[] pos;private float[] tan;private Bitmap bitmap;private Matrix mMatrix;private boolean first;public PlaneView(Context context) {super(context);init();}public PlaneView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);init();}public PlaneView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init();}private void init() {paint = new Paint();paint.setStrokeWidth(2);paint.setAntiAlias(true);paint.setColor(Color.GREEN);paint.setStyle(Paint.Style.STROKE);path = new Path();pathMeasure = new PathMeasure();first = true;pos = new float[2];tan = new float[2];mMatrix = new Matrix();drawbitmap();//属性动画final ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);//设置动画过程的监听valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {mAnimatorValue = (float) animation.getAnimatedValue();postInvalidate();}});valueAnimator.setDuration(2000);valueAnimator.setRepeatCount(ValueAnimator.INFINITE);//无限循环valueAnimator.start();}//单独创建一个100,100的bitmap画小飞机private void drawbitmap() {Canvas canvas = new Canvas();bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);canvas.setBitmap(bitmap);Path path = new Path();path.moveTo(70, 70);path.lineTo(50, 90);path.lineTo(50, 50);path.close();canvas.drawPath(path, paint);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (first) {width = getWidth();height = getHeight();path.addCircle(width / 2, height / 2, 250, Path.Direction.CW);pathMeasure.setPath(path, false);allLength = pathMeasure.getLength();first = false;}//画坐标轴和圆路径canvas.drawLine(width / 2, 0, width / 2, height, paint);canvas.drawLine(0, height / 2, width, height / 2, paint);canvas.drawPath(path, paint);//以curlength获取每一次圆上的点的坐标位置以及正切点位置。pathMeasure.getPosTan(curLength, pos, tan);// 以当前点的位置计算bitmap要旋转的角度,Math.atan2(tan[1], tan[0])获取弧度值,根据弧度与角度换算公式,Math.atan2(tan[1], tan[0]) * 180.0 / Math.PI为每一次的角度float degrees = (float) (Math.atan2(tan[1], tan[0]) * 180.0 / Math.PI);// 旋转,以70,70这个飞机头点为旋转基点mMatrix.postRotate(degrees, 70, 70);//平移,以70,70这个飞机头点为旋平移基点mMatrix.postTranslate(pos[0] - 70, pos[1] - 70);canvas.drawBitmap(bitmap, mMatrix, paint);mMatrix.reset();curLength = mAnimatorValue * allLength;}
}

android动画--小飞机旋转效果相关推荐

  1. Android动画效果translate、scale、alpha、rotate详解

    动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面 ...

  2. Android 动画之ScaleAnimation应用详解

    本节讲解ScaleAnimation 动画在应用中的实现,有需要的朋友可以参考下 android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画 ...

  3. Android动画渲染过程及原理(matrix),matrix动画,动画优化

    -- 矩阵(Matrix), Matrix动画 矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵.在物理学中,矩阵于电路学.力学.光学和量子物理中都 ...

  4. Android动画+自定义Dialog实现闲鱼发布页面动态效果

    先来看一下效果图: 一:新建一个项目DialogView 在layout文件夹下创建一个anmi的文件夹用于存放动画资源 1.首先创建进入Dialog和关闭Dialog时候的主题背景动画 进入Dial ...

  5. android jason动画,Android 动画之Lottie动画使用

    Android 动画之Lottie动画使用 一:简介 Lottie是Airbnb开源的一套跨平台的完整解决方案,设计师只需要使用After Effects(简称AE)设计动画之后,使用Lottic提供 ...

  6. android动画的实现原理,Android动画的实现原理 .

    1.动画运行模式 独行模式 中断模式 2.Animation类 每个动画都重载了父类的applyTransformation方法这个方法的主要作用是把一些属性组装成一个Transformation类, ...

  7. Android动画曲线库AndroidEasingFunctions

    Android动画曲线库AndroidEasingFunctions AndroidEasingFunction是基于Easing Function(缓动函数)的Android动画曲线库.它提供了九大 ...

  8. android 动画引擎,一个使用openGL渲染的炫丽Android动画库

    这是一个 android 动画特效库 可以实现各种炫酷动画. github地址: ht t ps:// gith  u b.co m/g pl ib s/an dro id- ma gic-s ur ...

  9. Android 动画分析学习笔记

    一:分类: Android动画分三种:view动画(对场景中的对象不断做图像变换<平移,缩放,旋转,透明度>).帧动画(顺序播放一系列图像产生动画效果).属性动画(动态改变对象属性). 二 ...

最新文章

  1. 资料分享:推荐一本《简单粗暴TensorFlow 2.0》开源电子书!
  2. 《LeetCode力扣练习》第96题 不同的二叉搜索树 Java
  3. oracle cbo 查询展开,Oracle CBO几种基本的查询转换详解
  4. YBTOJ洛谷P2042:维护数列(平衡树)
  5. C# 可空类型和空接合运算符(??)
  6. 全屏加载loading显示的解决方法
  7. linux 系统 指令lis,常用Linxu系统监控命令
  8. DOM节点的属性及文本操作
  9. 《jQuery Mobile快速入门》—— 1.6 可主题化的设计
  10. 活动目录建立IIS站点
  11. JQUERY 使用键盘左右键切换选项卡
  12. 开源mysql客户端_14款经典的MySQL客户端软件
  13. 如何进行windows数据恢复呢
  14. UVA 11137 - Ingenuous Cubrency
  15. 开启fiddler之后电脑就断网
  16. java计算机毕业设计健身房管理系统演示录像2021MyBatis+系统+LW文档+源码+调试部署
  17. 西岸风格合成器-Eventide Newfangled Audio Generate 1.2.1 WiN
  18. 华为防火墙应用层过滤--URL
  19. Python爬虫:运用多线程、IP代理模块爬取百度图片上小姐姐的图片
  20. 实现点击不同的按钮显示不同的内容【同一页面】web

热门文章

  1. 红队工具合集,安全er值得拥有
  2. BeautifulSoup
  3. 计算机系学霸情书,大学生学霸情书“火了”,各专业大显身手!网友:教科书级别!...
  4. (附源码)基于springboot的家政系统 毕业设计201524
  5. Mysql安装注意事项
  6. Rstudio中更新R
  7. 学习笔记2--自动驾驶汽车关键技术
  8. 初入Android~系统化学习必备(转自http://bbs.weand.com/read-htm-tid-6142.html)
  9. wince 蓝牙 学习
  10. YDB基本使用详解(转)