Android的canvas.rotate()与canvas.translate研究

本文详细解析了Android canvas.rotate()与canvas.translate()函数的使用方法,包括旋转和移动原理,通过实例代码展示如何应用这些函数进行坐标转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天研究了下Android的canvas.rotate()与canvas.translate,主要是rotate之前不太理解,所以后面计算坐标就不准。搞明白了就好弄了。
总结一下:
rotate:可以看成是旋转X 和Y坐标,把坐标按原点旋转degree之后,再去draw的时候,就是按旋转之后的坐标来,画布什么的不用去思考旋转。注意:degree为正,按顺时针旋转
translate:之前老是认为是移动画布,实际上是移动画笔,就是说移动 x=10,那么就是从坐标x轴10px开始画

可以通过Demo体验一下
主要代码如下:

package com.example.androidtest;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
        ((ImageView) findViewById(R.id.imageView90))
                .setImageBitmap(createBitmap(90));
        ((ImageView) findViewById(R.id.imageView90))
                .setImageBitmap(createBitmap(90));
        ((ImageView) findViewById(R.id.imageView180))
                .setImageBitmap(createBitmap(180));
        ((ImageView) findViewById(R.id.imageView270))
                .setImageBitmap(createBitmap(270));
    }

    private Bitmap createBitmap(int degress) {
        Bitmap icon = BitmapFactory.decodeResource(getResources(),
                R.drawable.ic_launcher);
        int iconWidth = icon.getWidth();
        Bitmap result = Bitmap.createBitmap(iconWidth * 2, iconWidth * 2,
                Config.ARGB_8888);
        Canvas canvas = new Canvas(result);
        canvas.drawColor(Color.BLACK);
        Paint paint = new Paint();
        paint.setColor(Color.RED);
        canvas.drawRect(new Rect(0, 0, iconWidth, iconWidth), paint);
        canvas.drawBitmap(icon, 0, 0, null);

        switch (degress) {
        case 90: {
            canvas.rotate(90);
            // canvas.translate(0, -iconWidth*2);
            // canvas.drawBitmap(icon, 0, 0, null);
            canvas.drawBitmap(icon, 0, -iconWidth * 2, null);
            break;
        }
        case 180: {
            canvas.rotate(180);
            canvas.translate(-iconWidth * 2, -iconWidth);
            canvas.drawBitmap(icon, 0, 0, null);
            break;
        }
        case 270: {
            canvas.rotate(270);
            canvas.translate(-iconWidth * 2, 0);
            canvas.drawBitmap(icon, 0, 0, null);
            break;
        }
        }

        return result;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值