編輯:Android開發教程
下面就貼上一個小程序代碼,主要運用SurfaceView來實現在屏幕上畫一個圓,你可以通過按方向鍵和觸摸屏幕來改變圓的位 置
代碼:
Activity
package com.view;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 隱藏狀態欄
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 把Activity的標題去掉
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 設置布局
this.setContentView(new MySurfaceView(this));
}
}
SurfaceView
package com.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class MySurfaceView extends SurfaceView implements Runnable, Callback {
private SurfaceHolder mHolder; // 用於控制SurfaceView
private Thread t; // 聲明一條線程
private boolean flag; // 線程運行的標識,用於控制線程
private Canvas mCanvas; // 聲明一張畫布
private Paint p; // 聲明一支畫筆
private int x = 50, y = 50, r = 10; // 圓的坐標和半徑
public MySurfaceView(Context context) {
super(context);
mHolder = getHolder(); // 獲得SurfaceHolder對象
mHolder.addCallback(this); // 為SurfaceView添加狀態監聽
p = new Paint(); // 創建一個畫筆對象
p.setColor(Color.WHITE); // 設置畫筆的顏色為白色
setFocusable(true); // 設置焦點
}
/**
* 自定義一個方法,在畫布上畫一個圓
*/
public void Draw() {
mCanvas = mHolder.lockCanvas(); // 獲得畫布對象,開始對畫布畫畫
mCanvas.drawRGB(0, 0, 0); // 把畫布填充為黑色
mCanvas.drawCircle(x, y, r, p); // 畫一個圓
mHolder.unlockCanvasAndPost(mCanvas); // 完成畫畫,把畫布顯示在屏幕上
}
/**
* 當SurfaceView創建的時候,調用此函數
*/
@Override
public void surfaceCreated(SurfaceHolder holder) {
t = new Thread(this); // 創建一個線程對象
flag = true; // 把線程運行的標識設置成true
t.start(); // 啟動線程
}
/**
* 當SurfaceView的視圖發生改變的時候,調用此函數
*/
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
/**
* 當SurfaceView銷毀的時候,調用此函數
*/
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
flag = false; // 把線程運行的標識設置成false
}
/**
* 當屏幕被觸摸時調用
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
x = (int) event.getX(); // 獲得屏幕被觸摸時對應的X軸坐標
y = (int) event.getY(); // 獲得屏幕被觸摸時對應的Y軸坐標
return true;
}
/**
* 當用戶按鍵時調用
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_DPAD_UP){ //當用戶點擊↑鍵時
y--; //設置Y軸坐標減1
}
return super.onKeyDown(keyCode, event);
}
@Override
public void run() {
while (flag) {
Draw(); // 調用自定義畫畫方法
try {
Thread.sleep(50); // 讓線程休息50毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
MySurfaceView首先繼承SurfaceView,然後實現Runnable和Callback接口
重寫了Runnable的run方法和 Callback的surfaceCreated(SurfaceHolder holder),surfaceChanged(SurfaceHolder holder, int format, int width,int height),surfaceDestroyed(SurfaceHolder holder)方法,
還實現了onTouchEvent(MotionEvent event),onKeyDown (int keyCode, KeyEvent event)方法來,詳細的在代碼裡已注釋。
Android代碼調試工具traceview 和 dmtracedump簡介
Android 程序調試工具 Google為我們提供的代碼調試工具的亮點:traceview和 dmtracedump 。有了這兩個工具,我們調試程序分析bug
Android RoboGuice2使用指南(2) 第一個例子Hello World
本例實現的功能和例子Android RoboGuice 使用指南(2):第一個例子Hello World一樣,所不同的是本例使用RoboGuice2.0 來實現。下載新的
Android監聽獲取應用的安裝和卸載事件
Android 應用程序的安裝和卸載事件,是由系統進行監聽並全局廣播的,支 持1.5(android 3)以上因此,如果想要監聽獲取應用的安裝和卸載事 件,只需要自定義一
Android數據存儲之File文件儲存數據
Android數據儲存之File文件儲存數據 一.存儲在內部還是外部? AndroidManifest.xml中manifest標簽下有一個屬性andro