編輯:Android開發實例
本文實例講述了Android中SurfaceView用法。分享給大家供大家參考,具體如下:
這裡貼上一個小程序代碼,主要運用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程序設計有所幫助。
Android提供了很多控件便於開發者進行UI相關的程序設計。但是很多時候,默認的一些UI設置不足以滿足我們的需求,要麼不好看,要麼高度不夠,亦或者是與應用界面不
Android作為一個偉大的系統,自然提供了設置默認打開程序的實現.在這篇文章中,我會介紹如何在Android系統中設置默認的程序. 在設置默認程序之前,無非有兩
引言在windows安裝Android的開發環境不簡單也說不上算復雜,本文寫給第一次想在自己Windows上建立Android開發環境投入Android浪潮的朋友
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩