Android 绘制rotate控件/图像
来源:互联网 发布:用益信托 数据 编辑:程序博客网 时间:2024/06/09 13:45
参数degree是手机旋转的角度,通过系统方法可得到;animation是否需要动画。该View作为一个控件使用,需要在程序中通过调用setOrientation()方法,来使其产生作用。
<span style="font-family:Arial;font-size:18px;"><span style="font-size:18px;"> public class RotatelView extends View { private static final int ANIMATION_SPEED = 270; private int mCurrentDegree = 0; // [0, 359] private int mStartDegree = 0; private int mTargetDegree = 0; private boolean mClockwise = false; private boolean mEnableAnimation = true; private long mAnimationStartTime = 0; private long mAnimationEndTime = 0; public void setOrientation(int degree, boolean animation) { mEnableAnimation = animation; // make sure in the range of [0, 359] degree = degree >= 0 ? degree % 360 : degree % 360 + 360; if (degree == mTargetDegree) return; mTargetDegree = degree; if (mEnableAnimation) { mStartDegree = mCurrentDegree; mAnimationStartTime = AnimationUtils.currentAnimationTimeMillis(); int diff = mTargetDegree - mCurrentDegree; diff = diff >= 0 ? diff : 360 + diff; // make it in range [0, 359] // Make it in range [-179, 180]. That's the shorted distance between the // two angles diff = diff > 180 ? diff - 360 : diff; mClockwise = diff >= 0; mAnimationEndTime = mAnimationStartTime + Math.abs(diff) * 1000 / ANIMATION_SPEED; } else { mCurrentDegree = mTargetDegree; } invalidate(); } @Override protected void onDraw(Canvas canvas) { if (mCurrentDegree != mTargetDegree) { long time = AnimationUtils.currentAnimationTimeMillis(); if (time < mAnimationEndTime) { int deltaTime = (int) (time - mAnimationStartTime); int degree = mStartDegree + ANIMATION_SPEED * (mClockwise ? deltaTime : -deltaTime) / 1000; degree = degree >= 0 ? degree % 360 : degree % 360 + 360; mCurrentDegree = degree; invalidate(); } else { mCurrentDegree = mTargetDegree; } } canvas.rotate((float) -mCurrentDegree); super.onDraw(canvas); }}
来源:修改相机中的缩放图,使其能够平滑旋转。
0 0
- Android 绘制rotate控件/图像
- Android控件绘制过程
- Android控件绘制过程
- Android控件绘制过程
- Android控件绘制过程
- android 绘制自定义控件
- Android绘制树形控件
- android 绘制自定义控件
- android图像绘制(四)——SurfaceView问题,自定义控件
- android图形图表绘制控件
- android控件的绘制过程
- 【Android控件原理】控件View的绘制
- Android控件架构与控件绘制
- android 2D图像的绘制
- Android中扭曲图像的绘制
- Android 图像绘制之Matrix 的使用
- Android的Canvas绘制正弦函数图像
- Android OpenGL 纹理绘制图像---基础知识
- 局部敏感哈希
- HDU 2028 Lowest Common Multiple Plus
- PE文件(一)
- mybatis返回类型resulttype之string和java.lang.string的不同点
- 事务
- Android 绘制rotate控件/图像
- OC-延展
- 通过代码设置布局参数,添加布局
- Espresso学习笔记--google doc前四篇部分翻译和理解
- [hihocoder #1196 : 高斯消元·二] 高斯消元求异或方程组
- 深入理解abstract class和interface
- spinlock变量没有初始化
- API与C#的数据类型对应关系表(JAVA)
- resin.conf配置详解