java bitmap 旋转_android Bitmap围绕一个点进行旋转

在项目中需要使用定位功能,也就是一个点围绕一个圆心进行旋转,查看了canvas的函数也就只有一个 canvas.drawBitmap(bitmap, matrix, paint)通过使用Matrix来实现旋转,这里实现一个demo,功能就是小原点顺时针绘制一个原然后逆时针撤销这个圆,通过Timer来实现。代码如下:

Surface.java这个是实现绘制图形的类

package com.example.test;

import java.util.Timer;

import java.util.TimerTask;

import android.annotation.SuppressLint;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.graphics.PixelFormat;

import android.graphics.PorterDuff.Mode;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.SurfaceHolder.Callback;

@SuppressLint("HandlerLeak")

class Surface extends SurfaceView implements Callback{

Bitmap bmp;

private Paint mPaint;

private SurfaceHolder mHolder;

public Surface(Context context) {

super(context);

mHolder = getHolder();

mHolder.addCallback(this);

mPaint = new Paint();

mPaint.setColor(Color.GREEN);

mPaint.setAntiAlias(true);//抗锯齿

setFocusable(true);

setFocusableInTouchMode(true);

// setZOrderOnTop(true);

// mHolder.setFormat(PixelFormat.TRANSPARENT);//设置背景透明

bmp = BitmapFactory.decodeResource(getResources(), R.drawable.camera_r_local);

bmp = Bitmap.createScaledBitmap(bmp, 15, 15, false);

}

public Handler handler = new Handler(){

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

case 0:

canvas_ok();

break;

}

super.handleMessage(msg);

}

};

public void canvas_ok(){

Canvas canvas = null;

try {

canvas = mHolder.lockCanvas();

canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);//清除屏幕

// canvas.save();

Matrix matrix = new Matrix();

matrix.postTranslate(130, 0);

matrix.postRotate(degree, 130 ,130);

canvas.drawBitmap(bmp, matrix, mPaint);

// canvas.restore();

} catch (Exception e) {

}finally {

if(canvas != null) {

mHolder.unlockCanvasAndPost(canvas);

}

}

}

int degree = 0;

Timer timer = new Timer();

boolean flag = true;

@Override

public void surfaceCreated(SurfaceHolder holder) {

canvas_ok();

timer.schedule(new TimerTask() {

@Override

public void run() {

if (flag) {

degree++;

if (degree == 360) {

flag = false;

}

}else {

degree--;

if(degree == -360 || degree == 0){

flag = true;

}

}

Log.e("flag", degree+" : "+flag);

handler.sendEmptyMessage(0);

}

}, 50, 50);

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

if (timer != null) {

timer.cancel();

timer = null;

}

}

}

Main7.java是主类

package com.example.test;

import android.app.Activity;

import android.os.Bundle;

import android.widget.RelativeLayout;

public class Main7 extends Activity{

Surface surface;

RelativeLayout.LayoutParams laParams;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

surface = new Surface(this);

laParams = new RelativeLayout.LayoutParams(260, 260);

setContentView(surface, laParams);

}

}

效果图如下:

1a6ed1d6050ca7953444e98a8febbb45.png

22546b79074c45da2509569093c92d0e.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值