서피스 뷰를 테스트한다.
화면을 외쫀에서 우로 녹색원이 가로지른다.
화면 오른쪽을 빠져나가고 바로 왼쪽에서 시작한다.
일시정지로 화면 밖을 나갈경우 복귀 후 마지막위치에서 시작한다
왼쪽에서 우로 반복한다.
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()는 setContentView() 앞에 놓인다 // requestWindowFeature(Window.FEATURE_NO_TITLE); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); Log.d(TAG, "onCreate()"); TestView surfaceEvent = new TestView(getApplicationContext()); setContentView(surfaceEvent); Log.d(TAG, "onCreate() out"); } } class TestView extends SurfaceView implements SurfaceHolder.Callback { private static final String TAG_sfvw = MySurfaceVwActy.class.getSimpleName(); private SurfaceHolder mHolder; public TstThread mThread; Context mContext; int mStrX, mStrY; float mRadius; public TestView(Context context) { super(context); Log.d(TAG_sfvw, "__TestView() "); mContext = context; mHolder = getHolder(); mHolder.addCallback(this); mStrX = 0; mStrY = 150; mRadius = 50.0f; } @Override public void surfaceCreated(SurfaceHolder holder) { Log.d(TAG_sfvw, "__surfaceCreated() "); mThread = new TstThread(mHolder, mContext, mStrX); mThread.setRunning(true); mThread.start(); Log.d(TAG_sfvw, "__surfaceCreated() out"); } @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() "); boolean retry = true; mThread.setRunning(false); while (retry) { try { mThread.join(); retry = false; } catch (InterruptedException e) { Log.d(TAG_sfvw, "catch(InterruptedException e) & repeat while(done){8888888}"); e.printStackTrace(); } } Log.d(TAG_sfvw, "__surfaceDestroyed() end"); } public class TstThread extends Thread { SurfaceHolder mHolder; boolean bIsRunning; int mWidth; int mHeight; public TstThread(SurfaceHolder holder, Context context, int mStrX) { Log.d(TAG_sfvw, "ImageThread() "); this.mHolder = holder; DisplayMetrics metrics = context.getResources().getDisplayMetrics(); mWidth = metrics.widthPixels; mHeight = metrics.heightPixels; } public void setRunning(boolean run) { Log.d(TAG_sfvw, "setRunning(" +run+ ")"); this.bIsRunning = run; } @Override public void run() { Log.d(TAG_sfvw, "__run() "); while(bIsRunning) { android.graphics.Canvas cnvs = null; try { cnvs = getHolder().lockCanvas(null); synchronized(mHolder) { android.graphics.Paint pnt = new android.graphics.Paint(); //이전화면을 지워 이돟효과를 마련 pnt.setColor(android.graphics.Color.BLACK); cnvs.drawRect(new Rect(0,0, mWidth, mHeight), pnt); mStrX++; if(mStrX > mWidth+mRadius+2) mStrX= 0; //화면을 빠져나가자마자 왼쪽에서 pnt.setColor(android.graphics.Color.GREEN); cnvs.drawCircle(mStrX, mStrY, mRadius, pnt); } } finally { if(cnvs != null) getHolder().unlockCanvasAndPost(cnvs); } } //while(true) Log.d(TAG_sfvw, "__run() end"); } } }
'Android 안드로이드' 카테고리의 다른 글
실시간으로 메뉴 내용 바꾸기 (0) | 2015.02.22 |
---|---|
카메라 플레시 (0) | 2015.02.20 |
서비스에서 알림창을 먼전 띄우고 매로리 해제된 activity를 (0) | 2015.02.13 |
MySurfaceVwActy (0) | 2014.12.28 |
코드 역난독화 deobfuscation disassemble (0) | 2014.12.28 |