Android 2D映像顯示

來源:互聯網
上載者:User

本文介紹在Android如何顯示2D映像

1)使用XML,代碼如下

 <ImageView<br />android:layout_width="wrap_content"<br />android:layout_height="wrap_content"<br />android:src="@drawable/android"<br />/>

(代碼比較簡單,不做解析了!!)

 

2)繼承View

根據public void setContentView (View view) ,建立一個繼承View的類,並重寫onDraw函數。代碼如下:

package android.szu.edu.cn;</p><p>import android.app.Activity;<br />import android.content.Context;<br />import android.graphics.Bitmap;<br />import android.graphics.BitmapFactory;<br />import android.graphics.Canvas;<br />import android.graphics.Color;<br />import android.os.Bundle;<br />import android.view.View;<br />import android.view.Window;</p><p>public class Show2DImage extends Activity {<br /> /** Called when the activity is first created. */<br /> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> requestWindowFeature(Window.FEATURE_NO_TITLE);<br /> //setContentView(R.layout.main);<br /> setContentView(new Panel(this));<br /> }</p><p> class Panel extends View{</p><p>public Panel(Context context) {<br />super(context);<br />// TODO Auto-generated constructor stub<br />}</p><p>public void onDraw(Canvas canvas){<br />Bitmap _scratch = BitmapFactory.decodeResource(getResources(), R.drawable.icon);<br />canvas.drawColor(Color.BLACK);<br />canvas.drawBitmap(_scratch, 10, 10, null);<br />}<br /> }<br />}

 

3)利用SurfaceView和Thread

package android.szu.edu.cn;</p><p>import android.app.Activity;<br />import android.content.Context;<br />import android.graphics.Bitmap;<br />import android.graphics.BitmapFactory;<br />import android.graphics.Canvas;<br />import android.graphics.Color;<br />import android.os.Bundle;<br />import android.view.SurfaceHolder;<br />import android.view.SurfaceView;<br />import android.view.Window;</p><p>public class Show2DImage extends Activity {<br />/** Called when the activity is first created. */<br />@Override<br />public void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);<br />requestWindowFeature(Window.FEATURE_NO_TITLE);<br />// setContentView(R.layout.main);<br />setContentView(new Panel(this));<br />}</p><p>// class Panel extends View{<br />//<br />// public Panel(Context context) {<br />// super(context);<br />// // TODO Auto-generated constructor stub<br />// }<br />//<br />// public void onDraw(Canvas canvas){<br />// Bitmap _scratch = BitmapFactory.decodeResource(getResources(),<br />// R.drawable.icon);<br />// canvas.drawColor(Color.BLACK);<br />// canvas.drawBitmap(_scratch, 10, 10, null);<br />// }<br />// }</p><p>class Panel extends SurfaceView implements SurfaceHolder.Callback {</p><p>private Draw2DThread _thread;</p><p>public Panel(Context context) {<br />super(context);<br />getHolder().addCallback(this);<br />_thread = new Draw2DThread(getHolder(), this);<br />}</p><p>public void onDraw(Canvas canvas) {<br />Bitmap _scratch = BitmapFactory.decodeResource(getResources(),<br />R.drawable.android);<br />canvas.drawColor(Color.BLACK);<br />canvas.drawBitmap(_scratch, 10, 10, null);<br />}</p><p>@Override<br />public void surfaceChanged(SurfaceHolder holder, int format, int width,<br />int height) {<br />// TODO Auto-generated method stub</p><p>}</p><p>@Override<br />public void surfaceCreated(SurfaceHolder holder) {<br />// TODO Auto-generated method stub<br />_thread.setRunning(true);<br />_thread.start();<br />}</p><p>@Override<br />public void surfaceDestroyed(SurfaceHolder holder) {<br />// TODO Auto-generated method stub<br />boolean retry = true;<br />_thread.setRunning(false);<br />while (retry) {<br />try {<br />_thread.join();<br />retry = false;<br />} catch (InterruptedException e) {<br />// TODO: handle exception<br />}<br />}<br />}</p><p>}</p><p>class Draw2DThread extends Thread {<br />private SurfaceHolder _surfaceHolder;<br />private Panel _panel;<br />private boolean _run;</p><p>public Draw2DThread(SurfaceHolder surfaceHolder, Panel panel) {<br />_surfaceHolder = surfaceHolder;<br />_panel = panel;<br />}</p><p>public void setRunning(boolean run) {<br />_run = run;<br />}</p><p>public void run() {<br />Canvas c;<br />while (_run) {<br />c = null;<br />try {<br />c = _surfaceHolder.lockCanvas(null);<br />synchronized (_surfaceHolder) {<br />_panel.onDraw(c);<br />}<br />} finally {<br />if (c != null) {<br />_surfaceHolder.unlockCanvasAndPost(c);<br />}<br />}<br />}</p><p>}<br />}<br />}

第三種方法,可以快速地描繪介面,使用SurfaceView可以讓其它非UI線程直接對畫面進行操作。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.