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); } } } } } }
'Android 안드로이드' 카테고리의 다른 글
SurfaceView 원이 이동, 화면 전환시 위치 저장 (0) | 2015.02.18 |
---|---|
서비스에서 알림창을 먼전 띄우고 매로리 해제된 activity를 (0) | 2015.02.13 |
코드 역난독화 deobfuscation disassemble (0) | 2014.12.28 |
Failed to create the Java Virtual Machine. (0) | 2014.12.17 |
ArrayList 요소 모두 제거 (0) | 2014.12.15 |