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);
} }
效果图如下:
android Bitmap围绕一个点进行旋转的更多相关文章
- Android Bitmap 常见的几个操作:缩放,裁剪,旋转,偏移
Android Bitmap 相关操作 常见的几个操作:缩放,裁剪,旋转,偏移 很多操作需要 Matrix 来支持:Matrix 通过矩阵来处理位图,计算出各个像素点的位置,从而把bitma ...
- Android Bitmap 缩放 旋转 水印 裁剪操作
在android当中,Bitmap代表一个图片,里面封装了图片相关的信息. 一.将图片进行缩放操作 1.获得Bitmap对象 Bitmap bitmap = BitmapFactory.decodeR ...
- Android bitmap图片处理
一.View转换为Bitmap 在Android中所有的控件都是View的直接子类或者间接子类,通过它们可以组成丰富的UI界面.在窗口显示的时候Android会把这些控件都加载到内存中 ...
- [翻译]开发文档:android Bitmap的高效使用
内容概述 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently",包括大尺寸Bitmap的高效加载,图片的异步加载和数据缓存 ...
- Android Bitmap 和 ByteArray的互相转换
Android Bitmap 和 ByteArray的互相转换 移动平台图像处理,需要将图像传给native处理,如何传递?将bitmap转换成一个 byte[] 方便传递也方便cpp代码直接处理图像 ...
- android 选择图片或拍照时旋转了90度问题
由于前面的博文中忽略了点内容,所以在这里补上,下面内容就是解决拍照或者选择图片显示的时候图片旋转了90度或者其他度数问题,以便照片可以正面显示:具体如下: 首先直接看上面博文下的拍完照或者选完图后处理 ...
- Android——BitMap(位图)相关知识总结贴
Android中文API(136) —— Bitmap http://www.apkbus.com/android-54644-1-1.html Android 4.0 r1 API—Bitmap(S ...
- Android Bitmap 全面解析(四)图片处理效果对比 ...
对比对象: UIL Volley 官方教程中的方法(此系列教程一里介绍的,ImageLoader的处理方法和官方的差不多) -------------------------------------- ...
- 36、Android Bitmap 全面解析
Android Bitmap 全面解析(一)加载大尺寸图片 http://www.eoeandroid.com/thread-331669-1-1.html Android Bitmap 全面解析(二 ...
随机推荐
- SQL中采用Newtonsoft.Json处理json字符串
原文 SQL中采用Newtonsoft.Json处理json字符串 使用环境: SQL Server2005; VS2010; 关于SQL中部署CLR程序集的方法,网上一搜一大把,需要了解的自行查阅, ...
- perl unicode utf-8 \x转换
[root@dr-mysql01 ~]# cat x5.pl use Encode; use JSON; use URI::Escape; use LWP::Simple; my $host = &q ...
- HDU 3466 Proud Merchants
题目大意:现在给出商品,有三个参数,记为pi,qi,vi,vi是商品的在你心里价值,pi是商品的价格,qi是你要买商品的时候至少需要的钱然后求可得的最大价值. 单词积累:Merchants 商人 t ...
- uva 10651 - Pebble Solitaire(记忆化搜索)
题目链接:10651 - Pebble Solitaire 题目大意:给出一个12格的棋盘,‘o'代表摆放棋子,’-‘代表没有棋子, 当满足’-oo'时, 最右边的棋子可以跳到最左边的位子,而中间的棋 ...
- 定制ToolChain for ARM
**************************************************************************编写:王卫无,北京讯业互联科技有限公司版本号:V1. ...
- 关于var(string)++的类型自动转换
展示时间: var miao="50"; var fen="59"; var shi="00"; setInterval(fun, 1000 ...
- ubuntu14.04LTS ruby on rails 开发环境
小弟初学 Ruby,也没用过Linux. 在网上搜了好多关于开发环境的配置的文章,但总是和实际有点出入,找了N遍文章后,终于找到最简环境安装配置方法,分享下 推荐用 Ubuntu,感觉对于习惯用Win ...
- 解決 centos中-bash: vim: command not found
用centos 的主机的時候, 用 vim 时出现 -bash: vim: command not found. 只能使用 vi. 那么如何安裝 vim 呢? 输入 rpm -qa|grep vim ...
- IOC容器初始化——BeanDefinition的Resource定位
以编程的方式使用DefaultListableBeanFactory时,首先定义一个Resource来定位容器使用的BeanDefinition.这是使用的是ClassPathResource,意味着 ...
- .NET中DLL“没有可放置在工具箱的组件”—FreeTextBox
主要针对在VS2012.VS2013的工具箱中,通过“选择项”添加自定义的Dll,如.NET类型时,出现“没有可放置在工具箱的组件”问题的常见解决方案.例如在线编辑工具:FreeTextBox 解决方 ...