'surfaceCreated'에 해당되는 글 2건

  1. 2014.12.28 MySurfaceVwActy
  2. 2014.11.14 surfaceCreated synchronized(getHolder()) drawCircle
Android 안드로이드2014. 12. 28. 15:11















public class MySurfaceVwActy extends Activity { private static final String TAG = MySurfaceVwActy.class.getSimpleName(); SurfaceView surfaceView; SurfaceHolder surfaceHolder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // requestWindowFeature(Window.FEATURE_NO_TITLE); // setContentView(R.layout.activity_my_surface_view); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); SurfaceVw surfaceEvent = new SurfaceVw(MySurfaceVwActy.this); surfaceEvent.setZOrderOnTop(true); surfaceEvent.getHolder().setFormat(PixelFormat.TRANSPARENT); addContentView(surfaceEvent, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); Log.d(TAG, "onCreate() end"); } } class SurfaceVw extends SurfaceView implements SurfaceHolder.Callback { private static final String TAG_sfvw = MySurfaceVwActy.class.getSimpleName(); private SurfaceHolder holder; public TstThread mThread; public SurfaceVw(Context context) { super(context); Log.d(TAG_sfvw, "Surface() "); holder = getHolder(); holder.addCallback(this); mThread = new TstThread(holder, context); } @Override public void surfaceCreated(SurfaceHolder holder) { Log.d(TAG_sfvw, "surfaceCreated() "); mThread.setRunning(true); mThread.start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.d(TAG_sfvw, "surfaceChanged() "); } @Override public void surfaceDestroyed(SurfaceHolder holder) { Log.d(TAG_sfvw, "surfaceDestroyed() "); //TODO thread stop boolean done = true; mThread.setRunning(false); while (done) { try { mThread.join(); done = false; } catch (InterruptedException e) { Log.d(TAG_sfvw, "catch(InterruptedException e) & repeat while(done){8888888}"); e.printStackTrace(); } } } public class TstThread extends Thread { SurfaceHolder mHolder; boolean m_run; int mStrX; int mStrY; int mWidth; int mHeight; public TstThread(SurfaceHolder holder, Context context) { Log.d(TAG_sfvw, "TstThread() "); this.mHolder = holder; DisplayMetrics metrics = context.getResources().getDisplayMetrics(); mWidth = metrics.widthPixels; mHeight = metrics.heightPixels; mStrX = 0; mStrY = 0; } public void setRunning(boolean run) { Log.d(TAG_sfvw, "setRunning() "); this.m_run = run; } @Override public void run() { Bitmap Img = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); int w = Img.getWidth(); int h = Img.getHeight(); Log.d(TAG_sfvw, "run() "); while (m_run) { Canvas canvas = null; try { canvas = mHolder.lockCanvas(); synchronized (mHolder) { Rect src = new Rect(0, 0, w, h); mStrX += 1; if(mStrX > mWidth) mStrX= 0; mStrY += 1; if(mStrY > mHeight) mStrY= 0; Rect dst = new Rect(mStrX, mStrY, mStrX+w, mStrY+h); canvas.drawBitmap(Img, src, dst, null); } } catch (Exception e) { // Log.d(TAG_sfvw, " "); e.printStackTrace(); } finally { if (canvas != null) { Log.d(TAG_sfvw, "while (m_run): finally"); mHolder.unlockCanvasAndPost(canvas); } } } } } }


Posted by 코드버무려
카테고리 없음2014. 11. 14. 11:54













SurfaceView와 그 부속 함수 사용 정리가 필요하다.

이것 저것 테스트한 코드를 쌓았다.

public class MySurfaceVwActy extends Activity { private static final String TAG = MySurfaceVwActy.class.getSimpleName(); SurfaceView surfaceView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // requestWindowFeature(Window.FEATURE_NO_TITLE); //setContentView 앞|뒤에 오면? 에러!! // setContentView(R.layout.activity_my_surface_view); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); TestView surfaceEvent = new TestView(getApplicationContext()); // TestView surfaceEvent = new TestView(MyTestViewActy.this); // surfaceEvent.setZOrderOnTop(true);     // surfaceEvent.getHolder().setFormat(PixelFormat.TRANSPARENT); // addContentView(surfaceEvent, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); setContentView(surfaceEvent); Button buttonStartCameraPreview = (Button)findViewById(R.id.startcamerapreview); Button buttonStopCameraPreview = (Button)findViewById(R.id.stopcamerapreview); Log.d(TAG, "onCreate() end"); } } class TestView extends SurfaceView implements SurfaceHolder.Callback { private static final String TAG_sfvw = MySurfaceVwActy.class.getSimpleName(); private SurfaceHolder mHolder; public TestView(Context context) { super(context); Log.d(TAG_sfvw, "Surface() "); mHolder = getHolder(); mHolder.addCallback(this); }

@Override public void surfaceCreated(SurfaceHolder holder) { Log.d(TAG_sfvw, "surfaceCreated() "); android.graphics.Canvas cnvs = null; try { cnvs = getHolder().lockCanvas(null); synchronized(getHolder()) { android.graphics.Paint pnt = new android.graphics.Paint(); pnt.setColor(android.graphics.Color.GREEN); cnvs.drawCircle(100, 100, 50, pnt); } } finally { if(cnvs != null) getHolder().unlockCanvasAndPost(cnvs); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.d(TAG_sfvw, "surfaceChanged() "); } @Override public void surfaceDestroyed(SurfaceHolder holder) { Log.d(TAG_sfvw, "surfaceDestroyed() "); } }






Posted by 코드버무려