canvas教程

Inspiration

字号+ 作者:H5之家 来源:H5之家 2015-09-08 16:09 我要评论( )

SEL 类成员方法的指针可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Ob

最近项目涉及到多媒体这一块,因此对Canvas的使用技巧做一个总结,供以后查询。下面是一个Bitmap旋转的Demo:

package com.jony.canvas; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity implements OnClickListener { private final static int UPDATE = 0x1; private Button rotate; private static ImageView image; // Handler应该使用static和final关键字进行限制,否则引用该对象的时候可能存在内存泄露 public static final Handler myHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case UPDATE: Bitmap destmap = (Bitmap) msg.obj; image.setImageBitmap(destmap);// 设置ImageView的显示内容 break; default: break; } }; }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rotate = (Button) findViewById(R.id.rotate); image = (ImageView) findViewById(R.id.image); rotate.setOnClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public void onClick(View v) { final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image01); new MyThread(bitmap).start(); } class MyThread extends Thread { private final static int ROTATE_DGREES = 45; private Bitmap bitmap; private Paint paint; private Matrix matrix; public MyThread(Bitmap bitmap) { this.bitmap = bitmap; matrix = new Matrix(); } @Override public void run() { for (int i = 0; i < ROTATE_DGREES; i++) { // 创建一个原图大小的空白Bitmap Bitmap bg = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); // 创建画布 Canvas canvas = new Canvas(bg); //canvas.drawColor(0xFF000000);清屏处理 canvas.drawColor(0x00000000);// 设置画布为透明背景 // 达到图片旋转效果有两种方式:1、旋转Canvas 2、矩阵旋转 canvas.rotate(i);// 旋转角度 canvas.drawBitmap(bitmap, 0, 0, paint); // 旋转矩阵 //matrix.setRotate(i); //canvas.drawBitmap(bitmap, matrix, paint); // image.setImageBitmap(bg);// 切忌,非UI线程不能处理UI信息 Message message = myHandler.obtainMessage(); message.obj = bg; message.what = 0x1; myHandler.sendMessage(message); } // 复位 Message message = myHandler.obtainMessage(); message.obj = bitmap; message.what = 0x1; myHandler.sendMessage(message); } } }

代码比较简单,在此不做过多解释。
 效果图:

                    

 代码下载地址:

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评
.