5
A
回答
0
您需要使用DragRectView類讀取所有觸摸事件和運動事件,然後在Canvas中繪製一個矩形。使用onTouchEvent函數,您可以從X和Y值中獲取座標。
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();
}
});
}
}
}
0
從lockdawn回答爲我工作,但我不得不糾正這一行...
Math.max(mEndX, mStartX), Math.max(mEndY, mStartX)));
我覺得行應該是:
Math.max(mEndX, mStartX), Math.max(mEndY, mStartY)));
相關問題
- 1. 計算作物座標
- 2. Android opengl座標
- 3. Android Gps座標
- 4. Android Canvas座標
- 5. 用3d物體正確設置座標的座標
- 6. ANDROID作物:方形作物
- 7. android屏幕座標如何工作?
- 8. 根據座標Android
- 9. Android帆布座標?
- 10. Android屏幕座標
- 11. 型動物座標相同的地方
- 12. 轉換世界物體座標
- 13. 試圖調整作物座標以適應新的寬高比
- 14. 如何獲得圖像作物的座標
- 15. 如何在上傳前獲取圖像的作物座標?
- 16. 旋轉後獲取新的作物座標
- 17. 如何在旋轉後獲取作物座標javascript
- 18. 製作圖座標
- 19. 我想根據其他物體渲染物體y座標
- 20. 座標位置圖像Android
- 21. 座標X Y繪製Android
- 22. android-get最新gps座標
- 23. Android更改地理座標
- 24. Java Android GPS發送座標
- 25. Android畫布座標系
- 26. Android谷歌地圖座標
- 27. android gps座標比較
- 28. 谷歌地圖座標android
- 29. WebView android的座標圖像
- 30. Android OpenGL座標問題
請附上代碼你是怎麼回事採用圖像。 – vasart
沒有代碼,因爲我不知道如何。 – BarkovAndrey
@BarkovAndrey,你知道如何解決這個問題嗎?我面臨類似的問題,仍然試圖找出如何做到這一點。 – San