在项目中需要使用定位功能,也就是一个点围绕一个圆心进行旋转,查看了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);
} }

效果图如下:

android Bitmap围绕一个点进行旋转的更多相关文章

  1. Android Bitmap 常见的几个操作:缩放,裁剪,旋转,偏移

    Android Bitmap 相关操作 常见的几个操作:缩放,裁剪,旋转,偏移      很多操作需要 Matrix 来支持:Matrix 通过矩阵来处理位图,计算出各个像素点的位置,从而把bitma ...

  2. Android Bitmap 缩放 旋转 水印 裁剪操作

    在android当中,Bitmap代表一个图片,里面封装了图片相关的信息. 一.将图片进行缩放操作 1.获得Bitmap对象 Bitmap bitmap = BitmapFactory.decodeR ...

  3. Android bitmap图片处理

    一.View转换为Bitmap         在Android中所有的控件都是View的直接子类或者间接子类,通过它们可以组成丰富的UI界面.在窗口显示的时候Android会把这些控件都加载到内存中 ...

  4. [翻译]开发文档:android Bitmap的高效使用

    内容概述 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently",包括大尺寸Bitmap的高效加载,图片的异步加载和数据缓存 ...

  5. Android Bitmap 和 ByteArray的互相转换

    Android Bitmap 和 ByteArray的互相转换 移动平台图像处理,需要将图像传给native处理,如何传递?将bitmap转换成一个 byte[] 方便传递也方便cpp代码直接处理图像 ...

  6. android 选择图片或拍照时旋转了90度问题

    由于前面的博文中忽略了点内容,所以在这里补上,下面内容就是解决拍照或者选择图片显示的时候图片旋转了90度或者其他度数问题,以便照片可以正面显示:具体如下: 首先直接看上面博文下的拍完照或者选完图后处理 ...

  7. Android——BitMap(位图)相关知识总结贴

    Android中文API(136) —— Bitmap http://www.apkbus.com/android-54644-1-1.html Android 4.0 r1 API—Bitmap(S ...

  8. Android Bitmap 全面解析(四)图片处理效果对比 ...

    对比对象: UIL Volley 官方教程中的方法(此系列教程一里介绍的,ImageLoader的处理方法和官方的差不多) -------------------------------------- ...

  9. 36、Android Bitmap 全面解析

    Android Bitmap 全面解析(一)加载大尺寸图片 http://www.eoeandroid.com/thread-331669-1-1.html Android Bitmap 全面解析(二 ...

随机推荐

  1. Noip2010提高组总结

    将Noip2010重新做了一遍,第一遍做下来居然只有290分,比当年浙江的一等线低了20分,因为各种坏习惯丢掉了许多分数,Noip时需要特别注意! T1:机器翻译 第一题直接暴力,内存足够所以不用循环 ...

  2. HDU 2451 Simple Addition Expression

    题目大意:有一个关于 简单加法表达式  的定义告诉你,就是  选一个数字i  如果 i+(i+1)+(i+2) 它的和,没有任何一位进位的话,那就是 一个i的简单加法表达式,求小于n的表达式数目. 题 ...

  3. 关于android源码中的APP编译时引用隐藏的API出现的问题

    今天在编译android源码中的计算器APP时发现,竟然无法使用系统隐藏的API,比如android.os.ServiceManager中的API,引用这个类时提示错误,记忆中在android源码中的 ...

  4. js遍历对象的属性并且动态添加属性

    var person= { name: 'zhangsan', pass: '123' , 'sni.ni' : 'sss', hello:function (){ for(var i=0;i< ...

  5. 【Android病毒分析报告】 - ZxtdPay 吸费恶魔

    本文章由Jack_Jia编写,转载请注明出处.  文章链接:http://blog.csdn.net/jiazhijun/article/details/11581543 作者:Jack_Jia    ...

  6. Android 建造者(Builder)模式

    关于 Builder 模式 详述:http://blog.csdn.net/jjwwmlp456/article/details/39890699 先来张图 看到 Android  中 使用了 Bui ...

  7. hdu 4782 Beautiful Soupz

    模拟.其实这题就是题目比较长而已...读完题目就差不多了.tag直接读就可以了,题目说了不用修改.然后整个题目就是让求text部分,严格按空格分开.注意每行前面空格个数. #include<al ...

  8. json在PHP中应用技巧

    一.json_encode() 该函数主要用来将数组和对象,转换为json格式.先看一个数组转换的例子: $arr = array ('a'=>1,'b'=>2,'c'=>3,'d' ...

  9. HttpGet()和HttpPost()2

    Get一般用于从服务器取数据,而且不改变原来的内容: Post一般用于向服务器传递数据,这需要改变服务器的内容. 从安全性上考虑,Get的安全性要稍微差点,因为它会把信息直接在地址栏显示出来.(但是A ...

  10. Poco::TCPServer框架解析

    Poco::TCPServer框架解析 POCO C++ Libraries提供一套 C++ 的类库用以开发基于网络的可移植的应用程序,功能涉及线程.文件.流,网络协议包括:HTTP.FTP.SMTP ...