Motion Event on Android screen with the help of an Image


This Android Java Program lets you create an Activity to Capture Motion Event on Android screen.
The program output is also shown below.

Main Activity

package com.example.motion_event;

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.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 Activity 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.image4);
        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;
    }

}

Post a Comment

Previous Post Next Post