Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here's one way, that You can use (however, there's lot of possibilities to implement the same). It's based on creation of custom View for drawing and tracking of selection rectangle. Also, You can just apply the logic from <code>onTouch()</code> of custom view in yours <code>OnTouchListener()</code>.</p> <p>Main layout:</p> <pre><code>&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/root" android:background="@android:color/background_dark"&gt; &lt;ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/image" android:src="@drawable/up_image" android:scaleType="fitXY" /&gt; &lt;com.example.TestApp.DragRectView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/dragRect" /&gt; &lt;/RelativeLayout&gt; </code></pre> <p>Custom view:</p> <pre><code>import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.text.TextPaint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class DragRectView extends View { private Paint mRectPaint; private int mStartX = 0; private int mStartY = 0; private int mEndX = 0; private int mEndY = 0; private boolean mDrawRect = false; private TextPaint mTextPaint = null; private OnUpCallback mCallback = null; public interface OnUpCallback { void onRectFinished(Rect rect); } public DragRectView(final Context context) { super(context); init(); } public DragRectView(final Context context, final AttributeSet attrs) { super(context, attrs); init(); } public DragRectView(final Context context, final AttributeSet attrs, final int defStyle) { super(context, attrs, defStyle); init(); } /** * Sets callback for up * * @param callback {@link OnUpCallback} */ public void setOnUpCallback(OnUpCallback callback) { mCallback = callback; } /** * Inits internal data */ private void init() { mRectPaint = new Paint(); mRectPaint.setColor(getContext().getResources().getColor(android.R.color.holo_green_light)); mRectPaint.setStyle(Paint.Style.STROKE); mRectPaint.setStrokeWidth(5); // TODO: should take from resources mTextPaint = new TextPaint(); mTextPaint.setColor(getContext().getResources().getColor(android.R.color.holo_green_light)); mTextPaint.setTextSize(20); } @Override public boolean onTouchEvent(final MotionEvent event) { // TODO: be aware of multi-touches switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mDrawRect = false; mStartX = (int) event.getX(); mStartY = (int) event.getY(); invalidate(); break; case MotionEvent.ACTION_MOVE: final int x = (int) event.getX(); final int y = (int) event.getY(); if (!mDrawRect || Math.abs(x - mEndX) &gt; 5 || Math.abs(y - mEndY) &gt; 5) { mEndX = x; mEndY = y; invalidate(); } mDrawRect = true; break; case MotionEvent.ACTION_UP: if (mCallback != null) { mCallback.onRectFinished(new Rect(Math.min(mStartX, mEndX), Math.min(mStartY, mEndY), Math.max(mEndX, mStartX), Math.max(mEndY, mStartX))); } invalidate(); break; default: break; } return true; } @Override protected void onDraw(final Canvas canvas) { super.onDraw(canvas); if (mDrawRect) { canvas.drawRect(Math.min(mStartX, mEndX), Math.min(mStartY, mEndY), Math.max(mEndX, mStartX), Math.max(mEndY, mStartY), mRectPaint); canvas.drawText(" (" + Math.abs(mStartX - mEndX) + ", " + Math.abs(mStartY - mEndY) + ")", Math.max(mEndX, mStartX), Math.max(mEndY, mStartY), mTextPaint); } } } </code></pre> <p>Activity is simple:</p> <pre><code>public class MyActivity extends Activity { private static final String TAG = "MyActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final DragRectView view = (DragRectView) findViewById(R.id.dragRect); if (null != view) { view.setOnUpCallback(new DragRectView.OnUpCallback() { @Override public void onRectFinished(final Rect rect) { Toast.makeText(getApplicationContext(), "Rect is (" + rect.left + ", " + rect.top + ", " + rect.right + ", " + rect.bottom + ")", Toast.LENGTH_LONG).show(); } }); } } } </code></pre> <p>The output is like the following:</p> <p><img src="https://i.stack.imgur.com/TOY0J.jpg" alt="image"></p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload