Android Реализация onTouchListener на объектах пути
Я создал объекты контуров, как показано ниже, которые рисуют различные формы. Различные кнопки реагируют на рисование различных форм на холсте. Я хотел бы переместить объекты пути, которые я создал на холсте, но я не знаю, как это сделать.
Я знаю только метод реализации ontouchlistener на растровом изображении, а не на объектах пути.
мои коды следующие:
ArrayList<Path> paths = new ArrayList<Path>();
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
paintColor.setColor(Color.RED);
paintColor.setStrokeWidth(2);
paintColor.setStyle(Paint.Style.STROKE);
if (MainActivity.isRectangle) {
Path path = new Path();
path.moveTo(1, 1);
path.lineTo(90, 1);
path.lineTo(90, 60);
path.lineTo(1, 60);
path.close();
paths.add(path);
}
for (Path p : paths) {
canvas.drawPath(p, paintColor );
}
canvas.drawPath(path, paintColor);
invalidate();
}
//mainActivity
rectbutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
isTriangle = false;
isRectangle = true;
isCircle= false;
isParallelogram = false;
isTapezium = false;
dv.invalidate();
}// onclick
});
onTouchEvent
@Override
public boolean onTouch(View v,MotionEvent event){
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
//screen touch get x of the touch event
x = event.getX();
//screen touch get y of the touch event
y =event.getY();
for (Path p : paths) {
path.moveTo(x,y);
}
dv.invalidate();
break;
case MotionEvent.ACTION_UP:
//screen touch get x of the touch event
x = event.getX();
//screen touch get y of the touch event
y =event.getY();
break;
case MotionEvent.ACTION_MOVE:
//screen touch get x of the touch event
x = event.getX();
//screen touch get y of the touch event
y =event.getY();
break;
}
return true;
}
Пожалуйста посоветуй. Спасибо.
1 ответ
На объекте пути нет onTouchListener. Однако выполните шаги, чтобы получить эту функциональность
1.) переопределите метод onTouchEvent(), чтобы найти координаты, к которым вы прикоснулись. Эта ссылка может помочь. http://developer.android.com/training/graphics/opengl/touch.html
2.) создайте RectF boundsRect и для каждого объекта пути сохраните его граничные координаты, используя
Path.getBounds(boundsRect);
метод и одновременно проверьте, лежат ли координаты касания в rectF boundsRect(используя bounds.contains(x,y)) в цикле в вышеприведенном методе.
3.) выберите этот путь и выполните желаемую операцию на нем сейчас.
Отредактированный код
@Override
public boolean onTouch(View v,MotionEvent event){
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
//screen touch get x of the touch event
x = event.getX();
//screen touch get y of the touch event
y = event.getY();
//check if touch point intersects the path bounds
for (Path p : paths) {
RectF pBounds = new RectF();
p.computeBounds(pBounds,true);
if(pBounds.contains(x,y)){
//select path
selected Path = p;// where selectedPath is assumed declared.
break;
}
dv.invalidate();
break;
case MotionEvent.ACTION_UP:
//screen touch get x of the touch event
x = event.getX();
//screen touch get y of the touch event
y = event.getY();
break;
case MotionEvent.ACTION_MOVE:
//screen touch get x of the touch event
x = event.getX();
//screen touch get y of the touch event
y = event.getY();
break;
}
}
return true;
}