• android Bitmap围绕一个点进行旋转


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

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

    [java] view plaincopyprint?
    1. package com.example.test;  
    2.   
    3. import java.util.Timer;  
    4. import java.util.TimerTask;  
    5.   
    6. import android.annotation.SuppressLint;  
    7. import android.content.Context;  
    8. import android.graphics.Bitmap;  
    9. import android.graphics.BitmapFactory;  
    10. import android.graphics.Canvas;  
    11. import android.graphics.Color;  
    12. import android.graphics.Matrix;  
    13. import android.graphics.Paint;  
    14. import android.graphics.PixelFormat;  
    15. import android.graphics.PorterDuff.Mode;  
    16. import android.os.Handler;  
    17. import android.os.Message;  
    18. import android.util.Log;  
    19. import android.view.SurfaceHolder;  
    20. import android.view.SurfaceView;  
    21. import android.view.SurfaceHolder.Callback;  
    22.   
    23. @SuppressLint("HandlerLeak")  
    24. class Surface extends SurfaceView implements Callback{  
    25.   
    26.     Bitmap bmp;  
    27.     private Paint mPaint;  
    28.     private SurfaceHolder mHolder;  
    29.     public Surface(Context context) {  
    30.         super(context);  
    31.         mHolder = getHolder();  
    32.         mHolder.addCallback(this);  
    33.         mPaint = new Paint();  
    34.         mPaint.setColor(Color.GREEN);  
    35.         mPaint.setAntiAlias(true);//抗锯齿   
    36.         setFocusable(true);  
    37.         setFocusableInTouchMode(true);  
    38. //        setZOrderOnTop(true);   
    39. //        mHolder.setFormat(PixelFormat.TRANSPARENT);//设置背景透明   
    40.         bmp = BitmapFactory.decodeResource(getResources(), R.drawable.camera_r_local);  
    41.         bmp = Bitmap.createScaledBitmap(bmp, 1515false);  
    42.     }  
    43.   
    44.     public Handler handler = new Handler(){  
    45.         @Override  
    46.         public void handleMessage(Message msg) {  
    47.             switch (msg.what) {  
    48.             case 0:  
    49.                 canvas_ok();  
    50.                 break;  
    51.             }  
    52.             super.handleMessage(msg);  
    53.         }  
    54.           
    55.     };  
    56.       
    57.     public void canvas_ok(){  
    58.          Canvas canvas = null;  
    59.         try {  
    60.             canvas = mHolder.lockCanvas();  
    61.             canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);//清除屏幕   
    62. //          canvas.save();   
    63.             Matrix matrix = new Matrix();  
    64.             matrix.postTranslate(1300);  
    65.             matrix.postRotate(degree, 130 ,130);  
    66.             canvas.drawBitmap(bmp, matrix, mPaint);  
    67. //          canvas.restore();   
    68.         } catch (Exception e) {  
    69.         }finally {  
    70.             if(canvas != null) {  
    71.                 mHolder.unlockCanvasAndPost(canvas);  
    72.             }  
    73.         }  
    74.     }  
    75.   
    76.     int degree = 0;  
    77.     Timer timer = new Timer();  
    78.     boolean flag = true;  
    79.     @Override  
    80.     public void surfaceCreated(SurfaceHolder holder) {  
    81.         canvas_ok();  
    82.         timer.schedule(new TimerTask() {  
    83.             @Override  
    84.             public void run() {  
    85.                 if (flag) {  
    86.                     degree++;  
    87.                     if (degree == 360) {  
    88.                         flag = false;  
    89.                     }  
    90.                 }else {  
    91.                     degree--;  
    92.                     if(degree == -360 || degree == 0){  
    93.                         flag = true;  
    94.                     }  
    95.                 }  
    96.                 Log.e("flag", degree+"  : "+flag);  
    97.                 handler.sendEmptyMessage(0);  
    98.             }  
    99.         }, 5050);  
    100.     }  
    101.   
    102.    http://www.cdtarena.com/ruanj.html
    103.     @Override  
    104.     public void surfaceChanged(SurfaceHolder holder, int format, int width,  
    105.             int height) {  
    106.           
    107.     }  
    108.   
    109.   
    110.     @Override  
    111.     public void surfaceDestroyed(SurfaceHolder holder) {  
    112.         if (timer != null) {  
    113.             timer.cancel();  
    114.             timer = null;  
    115.         }  
    116.     }  
    117. }  

    Main7.java是主类

    [java] view plaincopyprint?
    1. package com.example.test;  
    2.   
    3. import android.app.Activity;  
    4. import android.os.Bundle;  
    5. import android.widget.RelativeLayout;  
    6.   
    7. public class Main7 extends Activity{  
    8.     Surface surface;  
    9.     RelativeLayout.LayoutParams laParams;  
    10.     @Override  
    11.     protected void onCreate(Bundle savedInstanceState) {  
    12.         super.onCreate(savedInstanceState);  
    13.         surface = new Surface(this);  
    14.         laParams = new RelativeLayout.LayoutParams(260,  260);  
    15.         setContentView(surface, laParams);  
    16.     }  
    17.   
    18. }  

    效果图如下:

  • 相关阅读:
    记通过身份证号计算是否成年
    mysql出现which is not functionally dependent on columns in GROUP BY clause报错
    Git操作之 git add 撤销、git commit 撤销
    laraval ueditor 上传图片失败
    jquery调用百度api连接实现网页实时刷新汇率
    Laravel框架使用maatwebsite/excel 导出表格样式自定义
    数字千分位格式化
    laravel 5.4 解决使用Excel::load()导入的excel文件中日期格式变为数字
    layui select可以使用jQuery的change事件
    Linux系统通过命令修改BT宝塔面板的默认8888端口
  • 原文地址:https://www.cnblogs.com/cdtarena/p/3205599.html
Copyright © 2020-2023  润新知