1. Check out our companion app, Forums for Android! Download from Google Play

General How to implement a movable custom view to define an area on surface view

Discussion in 'Application Development' started by Dioptre, Mar 21, 2017.

  1. Dioptre

    Dioptre New Member
    Thread Starter
    5

    Jan 12, 2017
    2
    0
    5
    I'm making a motion detection app that takes picture on detection of motion. That is working fine. Now I'm trying to implement a movable custom view on top of my surfaceView to define the area of motion detection. I have found a function (AreaDetectorView.java) to do that. But as I'm new to Android programming, it is difficult for me to understand how to implement that function in my code. Please explain what changes are to be made in the layout file and the MotionDetectionActivity, so that I will get a view like this:

    [​IMG]

    Question on StackOverflow

    MotionDetectionActivity.java
    Code (Text):
    1. public class MotionDetectionActivity extends SensorsActivity {
    2.  
    3.     private static final String TAG = "MotionDetectionActivity";
    4.  
    5.     private static SurfaceView preview = null;
    6.     private static SurfaceHolder previewHolder = null;
    7.     private static Camera camera = null;
    8.     private static boolean inPreview = false;
    9.     private static long mReferenceTime = 0;
    10.     private static IMotionDetection detector = null;
    11.     public static MediaPlayer song;
    12.     public static Vibrator mVibrator;
    13.  
    14.     private static volatile AtomicBoolean processing = new AtomicBoolean(false);
    15.  
    16.     /**
    17.      * {@inheritDoc}
    18.      */
    19.     @Override
    20.     public void onCreate(Bundle savedInstanceState) {
    21.         super.onCreate(savedInstanceState);
    22.         getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    23.         setContentView(R.layout.main);
    24.  
    25.         mVibrator = (Vibrator)this.getSystemService(VIBRATOR_SERVICE);
    26.  
    27.         preview = (SurfaceView) findViewById(R.id.preview);
    28.         previewHolder = preview.getHolder();
    29.         previewHolder.addCallback(surfaceCallback);
    30.         previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    31.  
    32.         if (Preferences.USE_RGB) {
    33.             detector = new RgbMotionDetection();
    34.         } else if (Preferences.USE_LUMA) {
    35.             detector = new LumaMotionDetection();
    36.         } else {
    37.             // Using State based (aggregate map)
    38.             detector = new AggregateLumaMotionDetection();
    39.         }
    40.     }
    41.  
    42.     /**
    43.      * {@inheritDoc}
    44.      */
    45.     @Override
    46.     public void onConfigurationChanged(Configuration newConfig) {
    47.         super.onConfigurationChanged(newConfig);
    48.     }
    49.  
    50.     /**
    51.      * {@inheritDoc}
    52.      */
    53.     @Override
    54.     public void onPause() {
    55.         super.onPause();
    56.         if(song!=null && song.isPlaying())
    57.         {
    58.             song.stop();}
    59.  
    60.         camera.setPreviewCallback(null);
    61.         if (inPreview) camera.stopPreview();
    62.         inPreview = false;
    63.         camera.release();
    64.         camera = null;
    65.     }
    66.  
    67.     /**
    68.      * {@inheritDoc}
    69.      */
    70.     @Override
    71.     public void onResume() {
    72.         super.onResume();
    73.  
    74.         camera = Camera.open();
    75.     }
    76.  
    77.     private PreviewCallback previewCallback = new PreviewCallback() {
    78.  
    79.         /**
    80.          * {@inheritDoc}
    81.          */
    82.         @Override
    83.         public void onPreviewFrame(byte[] data, Camera cam) {
    84.             if (data == null) return;
    85.             Camera.Size size = cam.getParameters().getPreviewSize();
    86.             if (size == null) return;
    87.  
    88.             if (!GlobalData.isPhoneInMotion()) {
    89.                 DetectionThread thread = new DetectionThread(data, size.width, size.height);
    90.                 thread.start();
    91.             }
    92.         }
    93.     };
    94.  
    95.     private SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
    96.  
    97.         /**
    98.          * {@inheritDoc}
    99.          */
    100.         @Override
    101.         public void surfaceCreated(SurfaceHolder holder) {
    102.             try {
    103.                 camera.setPreviewDisplay(previewHolder);
    104.                 camera.setPreviewCallback(previewCallback);
    105.             } catch (Throwable t) {
    106.                 Log.e("Prek", "Exception in setPreviewDisplay()", t);
    107.             }
    108.         }
    109.  
    110.         /**
    111.          * {@inheritDoc}
    112.          */
    113.         @Override
    114.         public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    115.             if(camera != null) {
    116.                 Camera.Parameters parameters = camera.getParameters();
    117.                 Camera.Size size = getBestPreviewSize(width, height, parameters);
    118.                 if (size != null) {
    119.                     parameters.setPreviewSize(size.width, size.height);
    120.                     Log.d(TAG, "Using width=" + size.width + " height=" + size.height);
    121.                 }
    122.                 camera.setParameters(parameters);
    123.                 camera.startPreview();
    124.                 inPreview = true;
    125.             }
    126.         }
    127.  
    128.         /**
    129.          * {@inheritDoc}
    130.          */
    131.         @Override
    132.         public void surfaceDestroyed(SurfaceHolder holder) {
    133.             // Ignore
    134.         }
    135.     };
    136.  
    137.     private static Camera.Size getBestPreviewSize(int width, int height, Camera.Parameters parameters) {
    138.         Camera.Size result = null;
    139.  
    140.         for (Camera.Size size : parameters.getSupportedPreviewSizes()) {
    141.             if (size.width <= width && size.height <= height) {
    142.                 if (result == null) {
    143.                     result = size;
    144.                 } else {
    145.                     int resultArea = result.width * result.height;
    146.                     int newArea = size.width * size.height;
    147.  
    148.                     if (newArea > resultArea) result = size;
    149.                 }
    150.             }
    151.         }
    152.  
    153.         return result;
    154.     }
    155.  
    156.     private static final class DetectionThread extends Thread {
    157.  
    158.         private byte[] data;
    159.         private int width;
    160.         private int height;
    161.  
    162.         public DetectionThread(byte[] data, int width, int height) {
    163.             this.data = data;
    164.             this.width = width;
    165.             this.height = height;
    166.         }
    167.  
    168.         /**
    169.          * {@inheritDoc}
    170.          */
    171.         @Override
    172.         public void run() {
    173.             if (!processing.compareAndSet(false, true)) return;
    174.  
    175.             // Log.d(TAG, "BEGIN PROCESSING...");
    176.             try {
    177.                 // Previous frame
    178.                 int[] pre = null;
    179.                 if (Preferences.SAVE_PREVIOUS) pre = detector.getPrevious();
    180.  
    181.                 // Current frame (with changes)
    182.                 // long bConversion = System.currentTimeMillis();
    183.                 int[] img = null;
    184.                 if (Preferences.USE_RGB) {
    185.                     img = ImageProcessing.decodeYUV420SPtoRGB(data, width, height);
    186.  
    187.                     if (img != null && detector.detect(img, width, height))
    188.                     {
    189.                         if(song!=null && !song.isPlaying())
    190.                         {
    191.                             song.start();
    192.                             mVibrator.vibrate(50);
    193.                         }
    194.                     }
    195.                     else
    196.                     {
    197.                         if(song!=null && song.isPlaying())
    198.                         {
    199.                             song.pause();
    200.  
    201.                         }
    202.                     }
    203.                 }
    204.  
    205.                 int[] org = null;
    206.                 if (Preferences.SAVE_ORIGINAL && img != null) org = img.clone();
    207.  
    208.                 if (img != null && detector.detect(img, width, height)) {
    209.                     // The delay is necessary to avoid taking a picture while in
    210.                     // the
    211.                     // middle of taking another. This problem can causes some
    212.                     // phones
    213.                     // to reboot.
    214.                     long now = System.currentTimeMillis();
    215.                     if (now > (mReferenceTime + Preferences.PICTURE_DELAY)) {
    216.                         mReferenceTime = now;
    217.  
    218.                         Bitmap previous = null;
    219.                         if (Preferences.SAVE_PREVIOUS && pre != null) {
    220.                             if (Preferences.USE_RGB) previous = ImageProcessing.rgbToBitmap(pre, width, height);
    221.                             else previous = ImageProcessing.lumaToGreyscale(pre, width, height);
    222.                         }
    223.  
    224.                         Bitmap original = null;
    225.                         if (Preferences.SAVE_ORIGINAL && org != null) {
    226.                             if (Preferences.USE_RGB) original = ImageProcessing.rgbToBitmap(org, width, height);
    227.                             else original = ImageProcessing.lumaToGreyscale(org, width, height);
    228.                         }
    229.  
    230.                         Bitmap bitmap = null;
    231.                         if (Preferences.SAVE_CHANGES) {
    232.                             if (Preferences.USE_RGB) bitmap = ImageProcessing.rgbToBitmap(img, width, height);
    233.                             else bitmap = ImageProcessing.lumaToGreyscale(img, width, height);
    234.                         }
    235.  
    236.                         Log.i(TAG, "Saving.. previous=" + previous + " original=" + original + " bitmap=" + bitmap);
    237.                         Looper.prepare();
    238.                         new SavePhotoTask().execute(previous, original, bitmap);
    239.                     } else {
    240.                         Log.i(TAG, "Not taking picture because not enough time has passed since the creation of the Surface");
    241.                     }
    242.                 }
    243.             } catch (Exception e) {
    244.                 e.printStackTrace();
    245.             } finally {
    246.                 processing.set(false);
    247.             }
    248.             // Log.d(TAG, "END PROCESSING...");
    249.  
    250.             processing.set(false);
    251.         }
    252.     };
    253.  
    254.     private static final class SavePhotoTask extends AsyncTask<Bitmap, Integer, Integer> {
    255.  
    256.         /**
    257.          * {@inheritDoc}
    258.          */
    259.         @Override
    260.         protected Integer doInBackground(Bitmap... data) {
    261.             for (int i = 0; i < data.length; i++) {
    262.                 Bitmap bitmap = data[i];
    263.                 String name = String.valueOf(System.currentTimeMillis());
    264.                 if (bitmap != null) save(name, bitmap);
    265.             }
    266.             return 1;
    267.         }
    268.  
    269.         private void save(String name, Bitmap bitmap) {
    270.             File photo = new File(Environment.getExternalStorageDirectory(), name + ".jpg");
    271.             if (photo.exists()) photo.delete();
    272.  
    273.             try {
    274.                 FileOutputStream fos = new FileOutputStream(photo.getPath());
    275.                 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
    276.                 fos.close();
    277.             } catch (java.io.IOException e) {
    278.                 Log.e("PictureDemo", "Exception in photoCallback", e);
    279.             }
    280.         }
    281.     }
    282.     }

    AreaDetectorView.java

    Code (Text):
    1. public class AreaDetectorView extends LinearLayout {
    2.  
    3.         public static int Width;
    4.         public static int Height;
    5.  
    6.         private static Paint BoxPaint = null;
    7.         private static Paint TextPaint = null;
    8.         private static Paint ArrowPaint = null;
    9.         private static Path mPath = null;
    10.         private static Rect mRect = null;
    11.         private static int lastX, lastY = 0;
    12.         private static boolean mBoxTouched = false;
    13.         private static boolean mArrowTouched = false;
    14.  
    15.         private static int ArrowWidth = 0;
    16.  
    17.         private static Paint BoxPaint2 = null;
    18.  
    19.         public AreaDetectorView(Context context) {
    20.             super(context);
    21.         }
    22.  
    23.         public AreaDetectorView(Context context, AttributeSet attrs) {
    24.             super(context);
    25.             // TODO Auto-generated constructor stub
    26.             if (!this.getRootView().isInEditMode()) {
    27.                 ArrowWidth =GetDisplayPixel(context, 30);
    28.             }
    29.  
    30.             //InitDetectionArea();
    31.  
    32.             InitMemberVariables();
    33.             setWillNotDraw(false);
    34.         }
    35.         public static int GetDisplayPixel(Context paramContext, int paramInt)
    36.         {
    37.             return (int)(paramInt * paramContext.getResources().getDisplayMetrics().density + 0.5F);
    38.         }
    39.  
    40.         public static void InitMemberVariables() {
    41.             if (BoxPaint == null) {
    42.                 BoxPaint = new Paint();
    43.                 BoxPaint.setAntiAlias(true);
    44.                 BoxPaint.setStrokeWidth(2.0f);
    45.                 //BoxPaint.setStyle(Style.STROKE);
    46.                 BoxPaint.setStyle(Style.FILL_AND_STROKE);
    47.                 BoxPaint.setColor(AppShared.gResources.getColor(R.color.bwff_60));
    48.             }
    49.             if (ArrowPaint == null) {
    50.                 ArrowPaint = new Paint();
    51.                 ArrowPaint.setAntiAlias(true);
    52.                 ArrowPaint.setColor(AppShared.gResources.getColor(R.color.redDD));
    53.                 ArrowPaint.setStyle(Style.FILL_AND_STROKE);
    54.             }
    55.             if (TextPaint == null) {
    56.                 TextPaint = new Paint();
    57.                 TextPaint.setColor(0xFFFFFFFF);
    58.                 TextPaint.setTextSize(16);
    59.                 //txtPaint.setTypeface(lcd);
    60.                 TextPaint.setStyle(Style.FILL_AND_STROKE);
    61.             }
    62.             if (mPath == null) {
    63.                 mPath = new Path();
    64.             } else {
    65.                 mPath.reset();
    66.             }
    67.             if (mRect == null) {
    68.                 mRect = new Rect();
    69.             }
    70.  
    71.             if (BoxPaint2 == null) {
    72.                 BoxPaint2 = new Paint();
    73.                 BoxPaint2.setAntiAlias(true);
    74.                 BoxPaint2.setStrokeWidth(2.0f);
    75.                 //BoxPaint.setStyle(Style.STROKE);
    76.                 BoxPaint2.setStyle(Style.STROKE);
    77.                 BoxPaint2.setColor(AppShared.gResources.getColor(R.color.bwff_9e));
    78.             }
    79.  
    80.         }
    81.  
    82.         public static void InitDetectionArea() {
    83.             try {
    84.                 int w = AppShared.DetectionArea.width();
    85.                 int h = AppShared.DetectionArea.height();
    86.                 int x = AppShared.DetectionArea.left;
    87.                 int y = AppShared.DetectionArea.top;
    88.  
    89.                 // ver 2.6.0
    90.                 if (AppShared.DetectionArea.left == 1
    91.                         && AppShared.DetectionArea.top == 1
    92.                         && AppShared.DetectionArea.right == 1
    93.                         && AppShared.DetectionArea.bottom == 1) {
    94.  
    95.                     w = AppShared.DisplayWidth / 4;
    96.                     h = AppShared.DisplayHeight / 3;
    97.  
    98.                     // ver 2.5.9
    99.                     w = Width / 4;
    100.                     h = Height / 3;
    101.  
    102.                     AppShared.DetectorWidth = w;  
    103.                     AppShared.DetectorHeight = h;
    104.  
    105.                     x = (AppShared.DisplayWidth / 2) - (w / 2);
    106.                     y = (AppShared.DisplayHeight / 2) - (h / 2);
    107.  
    108.                     // ver 2.5.9
    109.                     x = (Width / 2) - (w / 2);
    110.                     y = (Height / 2) - (h / 2);
    111.  
    112.                 }
    113.  
    114.                 //AppShared.DetectionArea = new Rect(x, x, x + AppShared.DetectorWidth, x + AppShared.DetectorHeight);
    115.                 AppShared.DetectionArea = new Rect(x, y, x + w, y + h);
    116.  
    117.                 AppShared.gDetectionBitmapInt = new int[AppShared.DetectionArea.width() * AppShared.DetectionArea.height()];
    118.                 AppShared.gDetectionBitmapIntPrev = new int[AppShared.DetectionArea.width() * AppShared.DetectionArea.height()];
    119.  
    120.             } catch (Exception e) {
    121.                 e.printStackTrace();
    122.             }
    123.         }
    124.  
    125.         public static void SetDetectionArea(int x, int y, int w, int h) {
    126.             try {
    127.                 AppShared.DetectionArea = new Rect(x, y, w, h);
    128.  
    129.             } catch (Exception e) {
    130.                 e.printStackTrace();
    131.             }
    132.         }
    133.  
    134.         private void DrawAreaBox(Canvas canvas) {
    135.             try {
    136.             } catch (Exception e) {
    137.                 e.printStackTrace();
    138.             }
    139.         }
    140.  
    141.         @Override
    142.         protected void dispatchDraw(Canvas canvas) {
    143.             try {
    144.                 if (this.getRootView().isInEditMode()) {
    145.                     super.dispatchDraw(canvas);
    146.                     return;
    147.                 }
    148.  
    149.                 //canvas.save(Canvas.MATRIX_SAVE_FLAG);
    150.                 //AppShared.DetectionAreaOrient = UtilGeneralHelper.GetDetectRectByOrientation();
    151.  
    152.                 canvas.drawColor(0);
    153.                 mPath.reset();
    154.  
    155.                 canvas.drawRect(AppShared.DetectionArea, BoxPaint);
    156.  
    157.                 mPath.moveTo(AppShared.DetectionArea.right - ArrowWidth, AppShared.DetectionArea.bottom);
    158.                 mPath.lineTo(AppShared.DetectionArea.right, AppShared.DetectionArea.bottom - ArrowWidth);
    159.                 mPath.lineTo(AppShared.DetectionArea.right, AppShared.DetectionArea.bottom);
    160.                 mPath.lineTo(AppShared.DetectionArea.right - ArrowWidth, AppShared.DetectionArea.bottom);
    161.                 mPath.close();
    162.                 canvas.drawPath(mPath, ArrowPaint);
    163.  
    164.                 mPath.reset();
    165.                 //canvas.drawRect(AppShared.DetectionAreaOrient, BoxPaint2);
    166.                 //canvas.drawRect(AppShared.DetectionAreaOrientPort, BoxPaint2);
    167.  
    168.                 TextPaint.setTextSize(16);
    169.                 //TextPaint.setLetterSpacing(2);
    170.  
    171.                 TextPaint.setColor(getResources().getColor(R.color.bwff));
    172.  
    173.                 TextPaint.getTextBounds(getResources().getString(R.string.str_detectarea), 0, 1, mRect);
    174.                 canvas.drawText(getResources().getString(R.string.str_detectarea),
    175.                         AppShared.DetectionArea.left + 4,
    176.                         AppShared.DetectionArea.top + 4 + mRect.height(),
    177.                         TextPaint);
    178.                 int recH = mRect.height();
    179.  
    180.                 TextPaint.setStrokeWidth(1.2f);
    181.                 TextPaint.setTextSize(18);
    182.                 TextPaint.setColor(getResources().getColor(R.color.redD_9e));
    183.                 TextPaint.getTextBounds(getResources().getString(R.string.str_dragandmove), 0, 1, mRect);
    184.                 canvas.drawText(getResources().getString(R.string.str_dragandmove),
    185.                         AppShared.DetectionArea.left + 4,
    186.                         AppShared.DetectionArea.top + 20 + mRect.height()*2,
    187.                         TextPaint);
    188.  
    189.                 TextPaint.getTextBounds(getResources().getString(R.string.str_scalearea), 0, 1, mRect);
    190.                 canvas.drawText(getResources().getString(R.string.str_scalearea),
    191.                         AppShared.DetectionArea.left + 4,
    192.                         AppShared.DetectionArea.top + 36 + mRect.height()*3,
    193.                         TextPaint);
    194.  
    195.                 super.dispatchDraw(canvas);
    196.                 //canvas.restore();
    197.             } catch (Exception e) {
    198.                 e.printStackTrace();
    199.             }
    200.         }
    201.  
    202.         @Override
    203.         protected void onDraw(Canvas canvas) {
    204.             try {
    205.                 super.onDraw(canvas);
    206.                 invalidate();
    207.             } catch (Exception e) {
    208.                 e.printStackTrace();
    209.             } finally {
    210.  
    211.             }
    212.         }
    213.  
    214.         @Override
    215.         public boolean onTouchEvent(MotionEvent event) {
    216.             boolean retValue = true;
    217.             int X = (int)event.getX();
    218.             int Y = (int)event.getY();
    219.  
    220.             //AppMain.txtLoc.setText(String.valueOf(X) + ", " + String.valueOf(Y));
    221.  
    222.             switch (event.getAction()) {
    223.                 case MotionEvent.ACTION_DOWN:
    224.                     mBoxTouched = TouchedInBoxArea(X, Y);
    225.  
    226.                     //AppMain.txtLoc.setText("BoxTouched: " + String.valueOf(mBoxTouched));
    227.  
    228.                     if (!mBoxTouched) break;
    229.  
    230.                     lastX = X;
    231.                     lastY = Y;
    232.  
    233.                     BoxPaint.setStyle(Style.FILL_AND_STROKE);
    234.                     BoxPaint.setColor(AppShared.gResources.getColor(R.color.redD_9e));
    235.  
    236.                     mArrowTouched = TouchedInArrow(X, Y);
    237.                     //AppMain.txtLoc.setText("ArrowTouched: " + String.valueOf(mBoxTouched));
    238.  
    239.                     if (mArrowTouched) {
    240.                         ArrowPaint.setColor(AppShared.gResources.getColor(R.color.bwff_9e));
    241.                     }
    242.  
    243.                     break;
    244.  
    245.                 case MotionEvent.ACTION_MOVE:
    246.                     if (!mBoxTouched) break;
    247.  
    248.                     int moveX = X - lastX;
    249.                     int moveY = Y - lastY;
    250.  
    251.                     //AppMain.txtLoc.setText("Move X, Y: " + String.valueOf(moveX) + "," + String.valueOf(moveY));
    252.                     if (!mArrowTouched) {
    253.                         if (AppShared.DetectionArea.left + moveX < 0) {
    254.                             break;
    255.                         }
    256.     //              if (AppShared.DetectionArea.right + moveX > AppShared.gDisplay.getWidth()) {
    257.     //                  break;
    258.     //              }
    259.                         // ver 2.5.9
    260.                         if (AppShared.DetectionArea.right + moveX > Width) {
    261.                             break;
    262.                         }
    263.                         if (AppShared.DetectionArea.top + moveY < 0) {
    264.                             break;
    265.                         }
    266.     //              if (AppShared.DetectionArea.bottom + moveY > AppShared.gDisplay.getHeight()) {
    267.     //                  break;
    268.     //              }
    269.                         // ver 2.5.9
    270.                         if (AppShared.DetectionArea.bottom + moveY > Height) {
    271.                             break;
    272.                         }
    273.                     }
    274.  
    275.                     if (mArrowTouched) {
    276.                         if ((AppShared.DetectionArea.width() + moveX) < ArrowWidth * 2){
    277.                             break;
    278.                         }
    279.                         if ((AppShared.DetectionArea.height() + moveY) < ArrowWidth * 2) {
    280.                             break;
    281.                         }
    282.                         AppShared.DetectionArea.right += moveX;
    283.                         AppShared.DetectionArea.bottom += moveY;
    284.                         //Log.i("DBG", "W,H: " + String.valueOf(AppShared.DetectionArea.width()) + "," + String.valueOf(AppShared.DetectionArea.height()));
    285.                     } else {
    286.                         AppShared.DetectionArea.left += moveX;
    287.                         AppShared.DetectionArea.right += moveX;
    288.                         AppShared.DetectionArea.top += moveY;
    289.                         AppShared.DetectionArea.bottom += moveY;
    290.                     }
    291.  
    292.                     lastX = X;
    293.                     lastY = Y;
    294.  
    295.                     //AppMain.txtLoc.setText(String.valueOf(AppShared.DetectionArea.left) + ", " + String.valueOf(AppShared.DetectionArea.top));
    296.                     break;
    297.  
    298.                 case MotionEvent.ACTION_UP:
    299.                     mBoxTouched = false;
    300.                     mArrowTouched = false;
    301.                     //BoxPaint.setStyle(Style.STROKE);
    302.                     BoxPaint.setStyle(Style.FILL_AND_STROKE);
    303.                     BoxPaint.setColor(AppShared.gResources.getColor(R.color.bwff_60));
    304.                     ArrowPaint.setColor(AppShared.gResources.getColor(R.color.redDD));
    305.                     //AppMain.txtLoc.setText(String.valueOf(AppShared.DetectionArea.left) + ", " + String.valueOf(AppShared.DetectionArea.top));
    306.  
    307.                     if (AppShared.DetectionArea.left < 0) {
    308.                         AppShared.DetectionArea.left = 0;
    309.                     }
    310.     //          if (AppShared.DetectionArea.right > AppShared.gDisplay.getWidth()) {
    311.     //              AppShared.DetectionArea.right = AppShared.gDisplay.getWidth();
    312.     //          }
    313.                     // ver 2.5.9
    314.                     if (AppShared.DetectionArea.right > Width) {
    315.                         AppShared.DetectionArea.right = Width;
    316.                     }
    317.                     if (AppShared.DetectionArea.top < 0) {
    318.                         AppShared.DetectionArea.top = 0;
    319.                     }
    320.     //          if (AppShared.DetectionArea.bottom > AppShared.gDisplay.getHeight()) {
    321.     //              AppShared.DetectionArea.bottom = AppShared.gDisplay.getHeight();
    322.     //          }
    323.                     if (AppShared.DetectionArea.bottom > Height) {
    324.                         AppShared.DetectionArea.bottom = Height;
    325.                     }
    326.  
    327.                     AppShared.gDetectionBitmapInt = new int[AppShared.DetectionArea.width() * AppShared.DetectionArea.height()];
    328.                     AppShared.gDetectionBitmapIntPrev = new int[AppShared.DetectionArea.width() * AppShared.DetectionArea.height()];
    329.                     //AppShared.gDetectionBitmapInt = null;
    330.                     //AppShared.gDetectionBitmapIntPrev = null;
    331.  
    332.                     String area = String.valueOf(AppShared.DetectionArea.left)
    333.                             + "," + String.valueOf(AppShared.DetectionArea.top)
    334.                             + "," + String.valueOf(AppShared.DetectionArea.right)
    335.                             + "," + String.valueOf(AppShared.DetectionArea.bottom);
    336.  
    337.                    // UtilGeneralHelper.SavePreferenceSetting(AppShared.gContext, AppShared.PREF_DETECTION_AREA_KEY, area);
    338.  
    339.                     break;
    340.             }
    341.  
    342.  
    343.             invalidate();
    344.             return retValue;
    345.         }
    346.  
    347.         private boolean TouchedInBoxArea(int x, int y) {
    348.             boolean retValue = false;
    349.             try {
    350.  
    351.                 if (x > AppShared.DetectionArea.left && x < AppShared.DetectionArea.right) {
    352.                     if (y > AppShared.DetectionArea.top && y < AppShared.DetectionArea.bottom) {
    353.                         retValue = true;
    354.                     }
    355.                 }
    356.             } catch (Exception e) {
    357.                 e.printStackTrace();
    358.             }
    359.             return retValue;
    360.         }
    361.  
    362.         private boolean TouchedInArrow(int x, int y) {
    363.             boolean retValue = false;
    364.             try {
    365.  
    366.                 if (x > AppShared.DetectionArea.right - ArrowWidth && x < AppShared.DetectionArea.right) {
    367.                     if (y > AppShared.DetectionArea.bottom - ArrowWidth && y < AppShared.DetectionArea.bottom) {
    368.                         retValue = true;
    369.                     }
    370.                 }
    371.             } catch (Exception e) {
    372.                 e.printStackTrace();
    373.             }
    374.             return retValue;
    375.         }
    376.  
    377.         @Override
    378.         protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    379.             super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    380.             int width = MeasureSpec.getSize(widthMeasureSpec);
    381.             int height = MeasureSpec.getSize(heightMeasureSpec);
    382.             setMeasuredDimension(width, height);
    383.             Width = width;
    384.             Height = height;
    385.             InitDetectionArea();
    386.         }
    387.  
    388.         @Override
    389.         protected void onFinishInflate() {
    390.             super.onFinishInflate();
    391.         }
    392.  
    393.         @Override
    394.         protected void onLayout(boolean changed, int l, int t, int r, int b) {
    395.             // TODO Auto-generated method stub
    396.             for (int i = 0; i < this.getChildCount()-1; i++){
    397.                 (this.getChildAt(i)).layout(l, t, r, b);
    398.             }
    399.  
    400.             if (changed) {
    401.                 // check width height
    402.                 if (r != Width || b != Height) {
    403.                     // size does not match
    404.                 }
    405.             }
    406.         }
    407.         }

    main.xml (Layout)



    Code (Text):
    1. <?xml version="1.0" encoding="utf-8"?>
    2.     <RelativeLayout
    3.         xmlns:android="http://schemas.android.com/apk/res/android"
    4.         android:orientation="vertical"
    5.         android:layout_width="fill_parent"
    6.         android:layout_height="fill_parent">
    7.  
    8.         <FrameLayout
    9.             android:id="@+id/preview1"
    10.             android:layout_width="wrap_content"
    11.             android:layout_height="wrap_content">
    12.  
    13.             <SurfaceView
    14.                 android:layout_width="fill_parent"
    15.                 android:layout_height="wrap_content"
    16.                 android:id="@+id/preview">
    17.             </SurfaceView>
    18.  
    19.  
    20.  
    21.         </FrameLayout>
    22.  
    23.         <LinearLayout
    24.             android:layout_below="@id/preview1"
    25.             android:layout_width="fill_parent"
    26.             android:layout_height="wrap_content"
    27.             android:layout_centerInParent="true"
    28.             android:gravity="center">
    29.  
    30.         </LinearLayout>
    31.  
    32.         <ImageView android:id="@+id/myImageView"
    33.             android:layout_width="wrap_content"
    34.             android:layout_height="wrap_content"
    35.             android:src="@drawable/wm"
    36.             android:layout_alignParentBottom="true"
    37.             android:layout_alignParentEnd="true" />
    38.  
    39.         <TextView
    40.             android:layout_width="wrap_content"
    41.             android:layout_height="wrap_content"
    42.             android:id="@+id/trigcount"
    43.             android:layout_alignTop="@+id/myImageView"
    44.             android:layout_centerHorizontal="true"
    45.             android:textColor="@android:color/white" />
    46.  
    47.     </RelativeLayout>
     

    Advertisement

Share This Page

Loading...