温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

android canvas变形,移动,旋转

发布时间:2020-07-05 15:15:20 来源:网络 阅读:4038 作者:yy030913 栏目:移动开发
public class testView extends View {

    private Bitmap mBitmap = null;
    private Bitmap nBitmap = null;
    private float scaleX = 1.0f;
    private float scaleY = 1.0f;
    private float step = 0.0001f;
    
    public testView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_pet_spirit);
        nBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_pet_spirit_lighting);
    }
    
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        scaleCanvas(canvas);
        invalidate();
    }

    private void scaleCanvas(Canvas canvas) {
        scaleX += step;
        scaleY += step;
        Matrix matrix = new Matrix();
        Paint paint = new Paint();
        canvas.scale(scaleX, scaleY);
        canvas.drawBitmap(mBitmap, matrix, paint);
        canvas.drawBitmap(nBitmap, matrix, paint);
    }

}

先上代码,代码入门级!主要分享(1)canvas动画原理(2)应用场景(3)硬件加速兼容的bug

  • canvas动画原理:

画布初始大小一定,要通过scale,rotate,translate变化画布大小,角度,位移。在变化后的canvas上绘制想要的内容,内容也就跟着相应的变化。刚开始还以为是要先在canvas上绘制一边,在对canvas变形,这种误区刚开始会困惑很多人。其实canvas的draw方法是将绘制的内容画在变形后的画布上。原理是这样的:每次调用ondraw后都将获得一个新的canvas,这个canvas是一个满屏的区域,如果在刚获得这个canvas后就进行绘制,绘制的内容是立刻就显示出来了,但之后再进行变形后,canvas并不会自行进行绘制,如果在变形后在进行一次绘制,这时图像就重复了。

  • 应用场景:

为什么要用canvas进行变形呢,如果我们用一串图片实现相应的动画,这时就会有大量的内存为题需要考虑。而canvas的变形方式使用的都是native方法,所以自然快,方便。而调用ondraw进行动画效果绘制现在应用在各种view插件上面的是比较多的。各种点击动画效果。

  • 硬件加速兼容的bug:

clipPath()
clipRegion()
drawPicture()
drawTextOnPath()
drawVertices()

这几个方法在调用前一定要确定你已经在调用的activity中关闭了硬件加速,修改manifest

android:hardwareAccelerated="false"。否则你将会发现截取屏幕中的rgb时是有颜色的,可是屏幕一片惨白(幽灵绘制)

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI