2015-12-12 2 views
0

Я разрабатываю приложение, в котором пользователь может сделать снимок с камеры, а затем должен будет перетащить часть изображения для дальнейшего анализа. Выбранный раздел должен отображаться как-то (я пытаюсь использовать Rect). Деятельность заключается в следующем:Android - получить раздел взятого изображения с onTouch

public class PictureChopActivity extends Activity { 

private static final String TAG = "PictureChopActivity"; 

ImageView taken; 
Bitmap bm = CameraActivity.bm; 
Bitmap tempBitmap; 
Canvas tempCanvas; 
//just to check... 
private static float left_test = 200, top_test = 200, right_test = 500, bottom_test = 500; 
private static float left, top, right, bottom; 
Paint myPaint = new Paint(); 

private View.OnTouchListener sTouchListener = new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     Log.d(TAG, "onTouch called"); 

     switch (event.getAction()) { 

      case MotionEvent.ACTION_DOWN: 

       left = event.getX(); 
       right = event.getX(); 
       top = event.getY(); 
       bottom = event.getY(); 

       Log.d(TAG, "ACTION_DOWN"); 

       break; 

      case MotionEvent.ACTION_MOVE: 

       if (event.getX() > left && event.getY() > bottom) {   //derecha arriba 
        right = event.getX(); 
        top = event.getY(); 
       } else if (event.getX() > left && event.getY() < top) {  //derecha abajo 
        right = event.getX(); 
        bottom = event.getY(); 
       } else if (event.getX() < right && event.getY() > bottom) { //izquierda arriba 
        left = event.getX(); 
        top = event.getY(); 
       } else if (event.getX() < right && event.getY() < top) {  //izquierda abajo 
        left = event.getX(); 
        bottom = event.getY(); 
       } 

       Log.d(TAG, "ACTION_MOVE"); 
       Log.d(TAG, "left = " + left); 
       Log.d(TAG, "top = " + top); 
       Log.d(TAG, "right = " + right); 
       Log.d(TAG, "bottom = " + bottom); 


       break; 

      case MotionEvent.ACTION_CANCEL: 

       Log.d(TAG, "ACTION_CANCEL"); 

       break; 

      case MotionEvent.ACTION_UP: 

       Log.d(TAG, "ACTION_UP"); 

       break; 

     } 

     tempCanvas.drawRoundRect(new RectF(left, top, right, bottom), 2, 2, myPaint); 
     taken.setImageDrawable(new BitmapDrawable(getResources(), tempBitmap)); 

     return true; 
    } 

}; 




@Override 
public void onCreate (Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (myPaint == null) { 
     Log.d(TAG, "myPaint is null!"); 
    } 

    //Just to check... 
    tempBitmap = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), Bitmap.Config.ARGB_8888); 
    tempCanvas = new Canvas(tempBitmap); 
    tempCanvas.drawBitmap(bm, 0, 0, null); 
    tempCanvas.drawRoundRect(new RectF(left_test, top_test, right_test, bottom_test), 2, 2, myPaint); 
    //here a rect is drawn!! 


    FrameLayout fl = new FrameLayout(this); 

    taken = new ImageView(this); 
    taken.setImageDrawable(new BitmapDrawable(getResources(), tempBitmap)); 
    taken.setOnTouchListener(sTouchListener); 
    fl.addView(taken); 


    this.setContentView(fl); 

} 

}

Когда я сфотографировать и коснуться экрана, прямоугольник не отображается.

С этим кодом? Должен ли я попробовать другой подход?

EDIT: Я создал тестовый прямоугольник, который сначала нарисован.

Logcat:

12-12 20:26:19.133 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.133 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_DOWN 
12-12 20:26:19.143 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.143 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.143 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1506.0 
12-12 20:26:19.143 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.143 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.143 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 666.0 
12-12 20:26:19.163 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.163 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.163 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1506.0 
12-12 20:26:19.163 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.163 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.163 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 666.0 
12-12 20:26:19.173 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.173 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.173 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1506.0 
12-12 20:26:19.173 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.173 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.173 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 666.0 
12-12 20:26:19.193 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.193 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.193 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1506.0 
12-12 20:26:19.193 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.193 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.193 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 666.0 
12-12 20:26:19.213 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.213 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.213 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1506.0 
12-12 20:26:19.213 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.213 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.213 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 666.0 
12-12 20:26:19.223 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.223 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.223 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1497.2212 
12-12 20:26:19.223 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.223 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.223 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 665.22125 
12-12 20:26:19.243 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.243 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.243 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1494.1829 
12-12 20:26:19.243 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.243 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.243 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 665.0 
12-12 20:26:19.263 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.263 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.263 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1491.1027 
12-12 20:26:19.263 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.263 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.263 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 664.0 
12-12 20:26:19.283 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.283 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.283 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1486.6072 
12-12 20:26:19.283 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.283 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.283 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 664.0 
12-12 20:26:19.293 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.293 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.293 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1483.0435 
12-12 20:26:19.293 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.293 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.293 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 664.0 
12-12 20:26:19.313 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.313 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.313 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1480.0131 
12-12 20:26:19.313 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.313 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.313 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 664.0 
12-12 20:26:19.333 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.333 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.333 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1476.9796 
12-12 20:26:19.333 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.333 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.333 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 664.0 
12-12 20:26:19.343 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.343 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.343 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1473.9349 
12-12 20:26:19.343 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.343 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.343 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 664.0 
12-12 20:26:19.363 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.363 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.363 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1470.8989 
12-12 20:26:19.363 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.363 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.363 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 664.0 
12-12 20:26:19.383 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.383 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.383 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1466.3025 
12-12 20:26:19.383 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.383 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.383 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 663.0 
12-12 20:26:19.393 25944-25944/fogames.thecolourapp D/PictureChopActivity: onTouch called 
12-12 20:26:19.393 25944-25944/fogames.thecolourapp D/PictureChopActivity: ACTION_MOVE 
12-12 20:26:19.393 25944-25944/fogames.thecolourapp D/PictureChopActivity: left = 1461.7457 
12-12 20:26:19.393 25944-25944/fogames.thecolourapp D/PictureChopActivity: top = 666.0 
12-12 20:26:19.393 25944-25944/fogames.thecolourapp D/PictureChopActivity: right = 1506.0 
12-12 20:26:19.393 25944-25944/fogames.thecolourapp D/PictureChopActivity: bottom = 663.0 

В top и right значения являются постоянными. ACTION_DOWN должен сохранить первый угол и ACTION_MOVE противоположный, но результат не такой, как ожидалось.

+0

FYI: вместо 'Toast's использовать [эту] (HTTP: // разработчик .android.com/intl/es/tools/debugging/debugging-log.html) – pskink

+0

Согласно logcat вызывается onTouch, но он ничего не делает, поэтому есть и другая проблема. –

+0

Что значит «ничего не делает»? onTouch - это не пустой метод? – pskink

ответ

0

Я, наконец, нашел ошибку, это было очень просто!

я предполагал неправильное направление оси Y: на самом деле, top < bottom, поэтому условия должны быть изменены:

if (event.getX() > left && event.getY() < bottom) {   //extend right up 
        right = event.getX(); 
        top = event.getY(); 
       } else if (event.getX() > left && event.getY() > top) {  //extend right down 
        right = event.getX(); 
        bottom = event.getY(); 
       } else if (event.getX() < right && event.getY() < bottom) { //extend left up 
        left = event.getX(); 
        top = event.getY(); 
       } else if (event.getX() < right && event.getY() > top) {  //extend left down 
        left = event.getX(); 
        bottom = event.getY(); 
       }