zoukankan      html  css  js  c++  java
  • 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);
    	}
    
    }
    


    效果图如下:




  • 相关阅读:
    concate string when group by
    Regular Expression
    Login failed for user
    SQL Performance Tools
    Web References
    ARTetris-AR版俄罗斯方块的源码解析
    ARKit_1
    链表
    线性表
    ORB-SLAM2的特征提取算法
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3201202.html
Copyright © 2011-2022 走看看