视频直播源码,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动画小飞机旋转效果,更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示