編輯:關於Android編程
為了在SurfaceView上畫圖,我們定義一個MySurfaceView類,該類繼承SurfaceView並且實現SurfaceHolder.Callback接口。在surfaceCreated方法中我們啟動一個線程,在該線程中實現對畫布canvas的操作。
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
/**
*
* @author xu duzhou
*
*/
public class Mysurfaceview extends SurfaceView implements Callback {
SurfaceHolder holder;
MysurfaceviewThread mysurfaceviewThread;
public Mysurfaceview(Context context) {
super(context);
// TODO Auto-generated constructor stub
holder = getHolder();//獲取SurfaceHolder對象,同時指定callback
holder.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// 當SurfaceView被創建時,將畫圖Thread啟動起來。
mysurfaceviewThread = new MysurfaceviewThread();
mysurfaceviewThread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// 當SurfaceView被銷毀時,釋放資源。
if (mysurfaceviewThread != null) {
mysurfaceviewThread.exit();
mysurfaceviewThread = null;
}
}
/**
* 內部類 MysurfaceviewThread,該類主要實現對canvas的具體操作。
* @author xu duzhou
*
*/
class MysurfaceviewThread extends Thread {
private boolean done = false;
public MysurfaceviewThread() {
super();
this.done = false;
}
public void exit() {
// 將done設置為true 使線程中的while循環結束。
done = true;
try {
join();
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
SurfaceHolder surfaceHolder = holder;
int i = 1;
int j = 0;
while (!done) {
if (i > j) {
j = i;
i++;
} else {
j = i;
i--;
}
synchronized (surfaceHolder) {
//鎖定canvas
Canvas canvas = surfaceHolder.lockCanvas();
//canvas 執行一系列畫的動作
canvas.drawColor(Color.BLACK);
Bitmap _bit = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher);
canvas.drawBitmap(_bit, 10 + i, 10 + i, null);//使用默認的Paint對象
//釋放canvas對象,並發送到SurfaceView
surfaceHolder.unlockCanvasAndPost(canvas);
}
if (i == 100) {
j = i;
}
if (i == 1) {
j = 0;
}
}
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new Mysurfaceview(this));
}
新浪微博如何解綁手機 新浪微博會員怎麼解綁手機 新浪微博會員手
當我們為新浪微博的登陸設置了賬號保護、手機綁定之後,便將新浪微博賬號的安全與我們的手機號聯系起來了。由於換號或者其它原因,我們需要解除綁定的時候該怎麼辦呢?
微信不能發語音怎麼辦
有朋友在問微信無法發送語音怎麼辦,微信無法語音解決方法有哪些呢?我們最常使用的微信功能就是與好友語音,所以遇到微信不能發送語音這樣故障的朋友一定很著急吧,希
Android RecyclerView基本使用詳解
什麼是RecyclerView關於RecyclerView,是一個主要用於展示和回收View的有一個控件,在官用了一句話來概括RecyclerView 是一種通過提供有限
Android 中的 Service 詳細介紹【下】
上一篇文章Android 中的 Service 全面總結詳解【下】 介紹了Service的一些知識以及本地Service的使用,如果對Service還不太了解的建議先看下