आपको सभी टच इवेंट और मोशन इवेंट पढ़ने के लिए ड्रैगरेक्ट व्यू क्लास का उपयोग करने की आवश्यकता है, और उसके बाद एक कैनवास में एक आयत खींचें। ऑन टचवेन्ट फ़ंक्शन के साथ आप एक्स और वाई मानों से कॉर्ड प्राप्त कर सकते हैं।
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();
}
public void setOnUpCallback(OnUpCallback callback) {
mCallback = callback;
}
private void init() {
mRectPaint = new Paint();
mRectPaint.setColor(getContext().getResources().getColor(android.R.color.holo_gr een_light));
mRectPaint.setStyle(Paint.Style.STROKE);
mRectPaint.setStrokeWidth(5);
mTextPaint = new TextPaint();
mTextPaint.setColor(getContext().getResources().getColor(android.R.color.holo_gr een_light));
mTextPaint.setTextSize(20);
}
@Override
public boolean onTouchEvent(final MotionEvent event) {
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) > 5 || Math.abs(y - mEndY) > 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);
}
}
}
और यह मुख्य विधि हो जाएगा:
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
Bitmap Imag;
ImageView view;
TextView text;
int picw, pich;
int pix[];
int x1, x2, y1, y2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final DragRectView view2 = (DragRectView) findViewById(R.id.dragRect);
Imag = BitmapFactory.decodeResource(getResources(), R.drawable.rgb);
picw = Imag.getWidth();
pich = Imag.getHeight();
view = (ImageView) findViewById(R.id.image);
view.setImageBitmap(Imag);
text = (TextView) findViewById(R.id.tex);
pix = new int[picw * pich];
if (null != view2) {
view2.setOnUpCallback(new DragRectView.OnUpCallback() {
@Override
public void onRectFinished(final Rect rect) {
x1 = rect.left;
y1 = rect.top;
x2 = rect.right;
y2 = rect.bottom;
Toast.makeText(getApplicationContext(), "Coordenadas (" + x1 + ", " + y1 + ", " + x2 + ", " + y2 + ")", Toast.LENGTH_LONG).show();
}
});
}
}
}
कृपया, कोड संलग्न करें कि आप कैसे हैं छवि का चयन – vasart
कोई कोड नहीं है, क्योंकि मुझे नहीं पता कि कैसे। – BarkovAndrey
@ बार्कोव एंड्रे, क्या आपको यह पता चल गया कि इसे कैसे खींचें? मुझे एक समान समस्या का सामना करना पड़ रहा है, अभी भी यह पता लगाने की कोशिश कर रहा है कि इसे कैसे किया जाए .. – San