视频直播源码,android动画小飞机旋转效果
视频直播源码,android动画小飞机旋转效果
1 | //小飞机旋转动效果<br>public class PlaneView extends View {<br> private Paint paint;<br> private int width;<br> private int height;<br> private float curLength;<br> private float allLength;<br> private float mAnimatorValue;<br> private PathMeasure pathMeasure;<br> private Path path;<br> private float[] pos;<br> private float[] tan;<br> private Bitmap bitmap;<br> private Matrix mMatrix;<br> private boolean first;<br> public PlaneView(Context context) {<br> super(context);<br> init();<br> }<br> public PlaneView(Context context, @Nullable AttributeSet attrs) {<br> super(context, attrs);<br> init();<br> }<br> public PlaneView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {<br> super(context, attrs, defStyleAttr);<br> init();<br> }<br> private void init() {<br> paint = new Paint();<br> paint.setStrokeWidth(2);<br> paint.setAntiAlias(true);<br> paint.setColor(Color.GREEN);<br> paint.setStyle(Paint.Style.STROKE);<br> path = new Path();<br> pathMeasure = new PathMeasure();<br> first = true;<br> pos = new float[2];<br> tan = new float[2];<br> mMatrix = new Matrix();<br> drawbitmap();<br> //属性动画<br> final ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);<br> //设置动画过程的监听<br> valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {<br> @Override<br> public void onAnimationUpdate(ValueAnimator animation) {<br> mAnimatorValue = (float) animation.getAnimatedValue();<br> postInvalidate();<br> }<br> });<br> valueAnimator.setDuration(2000);<br> valueAnimator.setRepeatCount(ValueAnimator.INFINITE);//无限循环<br> valueAnimator.start();<br> }<br> //单独创建一个100,100的bitmap画小飞机<br> private void drawbitmap() {<br> Canvas canvas = new Canvas();<br> bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);<br> canvas.setBitmap(bitmap);<br> Path path = new Path();<br> path.moveTo(70, 70);<br> path.lineTo(50, 90);<br> path.lineTo(50, 50);<br> path.close();<br> canvas.drawPath(path, paint);<br> }<br> @Override<br> protected void onDraw(Canvas canvas) {<br> super.onDraw(canvas);<br> if (first) {<br> width = getWidth();<br> height = getHeight();<br> path.addCircle(width / 2, height / 2, 250, Path.Direction.CW);<br> pathMeasure.setPath(path, false);<br> allLength = pathMeasure.getLength();<br> first = false;<br> }<br> //画坐标轴和圆路径<br> canvas.drawLine(width / 2, 0, width / 2, height, paint);<br> canvas.drawLine(0, height / 2, width, height / 2, paint);<br> canvas.drawPath(path, paint);<br> //以curlength获取每一次圆上的点的坐标位置以及正切点位置。<br> pathMeasure.getPosTan(curLength, pos, tan);<br> // 以当前点的位置计算bitmap要旋转的角度,Math.atan2(tan[1], tan[0])获取弧度值,根据弧度与角度换算公式,Math.atan2(tan[1], tan[0]) * 180.0 / Math.PI为每一次的角度<br> float degrees = (float) (Math.atan2(tan[1], tan[0]) * 180.0 / Math.PI);<br> // 旋转,以70,70这个飞机头点为旋转基点<br> mMatrix.postRotate(degrees, 70, 70);<br> //平移,以70,70这个飞机头点为旋平移基点<br> mMatrix.postTranslate(pos[0] - 70, pos[1] - 70);<br> canvas.drawBitmap(bitmap, mMatrix, paint);<br> mMatrix.reset();<br> curLength = mAnimatorValue * allLength;<br> }<br>} |
以上就是 视频直播源码,android动画小飞机旋转效果,更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现