转自:
在项目中需要使用定位功能,也就是一个点围绕一个圆心进行旋转,查看了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);
-
-
-
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);
-
-
Matrix matrix = new Matrix();
-
matrix.postTranslate(130, 0);
-
matrix.postRotate(degree, 130 ,130);
-
canvas.drawBitmap(bmp, matrix, mPaint);
-
-
} 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是主类
[java] view plaincopyprint?
-
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);
-
}
-
-
}
效果图如下:
阅读(766) | 评论(0) | 转发(0) |