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

android Bitmap围绕一个点进行旋转

2013-07-22 16:34 162 查看
转自: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  
        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);  
    }  
  
   http://www.cdtarena.com/ruanj.html
    @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);  
    }  
  
}  

效果图如下:



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