MainActivity.java
package in.kantapp.example23; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; public class MainActivity extends AppCompatActivity implements OnTouchListener { Ourview v; Bitmap bm; float x, y; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); v = new Ourview(this); v.setOnTouchListener(this); bm = BitmapFactory.decodeResource(getResources(), R.drawable.pin); x = 0; y = 0; setContentView(v); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); v.pause(); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); v.resume(); } // surface view is going to be a thread now class Ourview extends SurfaceView implements Runnable { Thread th = null; SurfaceHolder holder; boolean var = false; public Ourview(Context context) { super(context); // TODO Auto-generated constructor stub holder = getHolder(); } @Override public void run() { // TODO Auto-generated method stub while (var = true) { // do stuff if (!holder.getSurface().isValid()) { continue; } Canvas c = holder.lockCanvas(); /* * while drawing on a canvas we lock it and after drawing on it * we unlock it */ c.drawARGB(255, 250, 150, 20);// rgb values c.drawBitmap(bm, x - (bm.getWidth() / 2), y - (bm.getHeight() / 2), null); holder.unlockCanvasAndPost(c); } } public void pause() { var = false; while (true) { try { th.join(); /* * would pause the currently executing thread till the user * finishes its job */ } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; } th = null; } public void resume() { var = true; th = new Thread(this); th.start(); } } @Override public boolean onTouch(View v, MotionEvent me) { // TODO Auto-generated method stub try { Thread.sleep(80); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } switch (me.getAction()) { case MotionEvent.ACTION_DOWN: x = me.getX(); y = me.getY(); break; case MotionEvent.ACTION_UP: x = me.getX(); y = me.getY(); break; case MotionEvent.ACTION_MOVE: x = me.getX(); y = me.getY(); break; default: break; } return true; } }
No comments:
Post a Comment