Простой пример работы с SurfaceView

  1. -Класс MainActivity-
  2.  
  3. package com.mycompany.myapp;
  4.  
  5. import android.app.*;
  6. import android.os.*;
  7. import android.view.*;
  8. import android.widget.*;
  9.  
  10. public class MainActivity extends Activity {
  11.  
  12.     @Override
  13.     public void onCreate(Bundle savedInstanceState) {
  14.         super.onCreate(savedInstanceState);
  15.         // Отображаем SurfaceView
  16.         setContentView(new mySurfaceView(this));
  17.     }
  18. }
  19.  
  20. -Класс MySurfaceView-
  21.  
  22. package com.mycompany.myapp;
  23.  
  24. import android.content.*;
  25. import android.view.*;
  26.  
  27. public class mySurfaceView extends SurfaceView implements SurfaceHolder.Callback {
  28.  
  29.     public myThread t;
  30.  
  31.     public mySurfaceView(Context c) {
  32.         super(c);
  33.         //добавляем Runnable-объект mySyrfaceView в очередь
  34.         getHolder().addCallback(this);
  35.     }
  36.  
  37.     /** Метод вызывается при создании области для рисования */
  38.     public void surfaceCreated(SurfaceHolder p1) {
  39.         t = new myThread(getHolder());
  40.         t.start();
  41.     }
  42.  
  43.     /** Метод вызывается при изменении области для рисования */
  44.     public void surfaceChanged(SurfaceHolder p1, int p2, int p3, int p4) {    }
  45.  
  46.     /** Метод вызывается при разрушении области для рисования */
  47.     public void surfaceDestroyed(SurfaceHolder p1) {
  48.         //делаем ok=false,тем самим прекращаем бесконечный цикл в myThread
  49.         t.ok = false;
  50.     }
  51.  
  52. }
  53.  
  54. -Класс myThread-
  55.  
  56. package com.mycompany.myapp;
  57. import android.graphics.*;
  58. import android.view.*;
  59.  
  60. public class myThread extends Thread {
  61.  
  62.     public SurfaceHolder sh;
  63.     public boolean ok = true;
  64.     public Canvas c;
  65.     public Paint p;
  66.  
  67.     public myThread(SurfaceHolder sh) {
  68.         this.sh = sh;
  69.         p = new Paint();
  70.     }
  71.  
  72.     public void run() {
  73.         p.setColor(Color.WHITE);
  74.         while (ok) {
  75.             long now = System.currentTimeMillis();
  76.             //блокируем канвас, чтобы сделать отрисовку
  77.             c = sh.lockCanvas();
  78.             c.drawColor(Color.BLACK);
  79.             c.drawText(now + "", 0, 10, p);
  80.             //разблокируем канвас,и выводим результат на экран
  81.             sh.unlockCanvasAndPost(c);
  82.         }
  83.     }
  84. }
Все примеры что мне приходилось встречать в интернетах были сложными и запутаными.Написал самый простой вариант.

Реклама

Мы в соцсетях

tw tg yt gt