您的位置:首页 > 移动开发 > Android开发

android Bitmap围绕一个点进行旋转

2013-07-22 16:35 351 查看
转自:http://www.cdtarena.com/gpx/201307/9312.html
在项目中需要使用定位功能,也就是一个点围绕一个圆心进行旋转,查看了canvas的函数也就只有一个 canvas.drawBitmap(bitmap, matrix, paint)通过使用Matrix来实现旋转,这里实现一个demo,功能就是小原点顺时针绘制一个原然后逆时针撤销这个圆,通过Timer来实现。代码如下:Surface.java这个是实现绘制图形的类[java] view plaincopyprint?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

publicvoid handleMessage(Message msg) {

switch (msg.what) {

case0:

canvas_ok();

break;

}

super.handleMessage(msg);

}

};

publicvoid 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

publicvoid surfaceCreated(SurfaceHolder holder) {

canvas_ok();

timer.schedule(new TimerTask() {

@Override

publicvoid 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);

}

http://www.cdtarena.com/ruanj.html

@Override

publicvoid surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

}

@Override

publicvoid surfaceDestroyed(SurfaceHolder holder) {

if (timer != null) {

timer.cancel();

timer = null;

}

}

}

Main7.java是主类[java] view plaincopyprint?package com.example.test;

import android.app.Activity;

import android.os.Bundle;

import android.widget.RelativeLayout;

publicclass Main7 extends Activity{

Surface surface;

RelativeLayout.LayoutParams laParams;

@Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

surface = new Surface(this);

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

setContentView(surface, laParams);

}

}

效果图如下:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: