Я написал приложение на java, и оно отлично работает, я хочу сделать то же самое на android studio, используя тот же метод, но у меня возникают проблемы с событием движения, MotionEvent.ACTION_MOVE
не распознает, когда я щелкаю форму, чтобы перетащить ее таким образом, ничего не происходит. Но в блоке MotionEvent.ACTION_MOVE
, если (!MidButton.getBoundBox().contains(xDelta, yDelta))
, то форма будет двигаться, когда я нажимаю в любом месте экрана, даже когда я вообще не касался формы, она все еще движется, и это не то, что я хочу, потому что я хочу создайте и другие формы на виде и переместите каждую из них, когда я коснусь их. Я ничего не редактировал в моем activity_main.xml
файле. Я перепробовал все на inte rnet и, похоже, ничего не работает. Вот мой код Я ценю ваши усилия, ребята. Спасибо.
Это мой класс DrawView
import android.content.Context;
import android.graphics.*;
import android.view.*;
import android.graphics.Region;
public class DrawView extends View {
private int xDelta, yDelta;
Paint paint = new Paint();
//Line Dragger
LineDragger MidButton = new LineDragger(paint,200,200);
public DrawView(Context context) {
super(context);
}
public boolean onTouchEvent(MotionEvent event) {
int eventaction = event.getAction();
xDelta = (int) event.getX();
yDelta = (int) event.getY();
switch (eventaction) {
case MotionEvent.ACTION_DOWN: // touch down so check if the finger is on
System.out.println("x position :" + xDelta + " " + "y position :" + yDelta);
invalidate();
break;
case MotionEvent.ACTION_MOVE: // touch drag with the ball
if (MidButton.getBoundBox().contains(xDelta, yDelta)) {
MidButton.setLeft(xDelta);
MidButton.setTop(yDelta);
invalidate();
}
break;
case MotionEvent.ACTION_UP:
// touch drop - just do things here after dropping
break;
}
// redraw the canvas
return super.onTouchEvent(event);
}
@Override
public void onDraw(Canvas canvas) {
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(3);
MidButton.onDraw(canvas);
}
}
Класс Shape
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Region;
import com.example.a8balltool.DrawView;
public abstract class Shapes {
//Properties of Shapes
private Paint shapeColor;
private float left;
private float top;
private Rect boundBox;
public Rect getBoundBox(){return boundBox;}
public void setBoundBox(Rect boundBox){this.boundBox = boundBox;}
//Abstract method to draw the Shapes,
public abstract void onDraw(Canvas canvas);
//Abstract method to move the Shapes,
public abstract void moveShapes(DrawView dv);
public Paint getShapeColor() {
return shapeColor;
}
public void setShapeColor(Paint shapeColor) {
this.shapeColor = shapeColor;
}
public float getLeft() {
return left;
}
public void setLeft(float left) {
this.left = left;
}
public float getTop() {
return top;
}
public void setTop(float top) {
this.top = top;
}
}
Класс Line Dragger
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Region;
public class LineDragger extends Shapes {
//Constructor
public LineDragger(Paint shapecolor, float left, float top){
//Assign parameter values to properties of the Line (calls super's get/set methods)
this.setShapeColor(shapecolor);
this.setLeft(left);
this.setTop(top);
}
@Override
public void onDraw(Canvas canvas) {
Paint mainColor = this.getShapeColor();
//mainColor.setColor(Color.BLACK);
mainColor.setStyle(Paint.Style.STROKE);
mainColor.setStrokeWidth(7);
canvas.drawLine(this.getLeft()-15, this.getTop(),this.getLeft()+15,this.getTop(),mainColor);
canvas.drawLine(this.getLeft(), this.getTop()-15,this.getLeft(),this.getTop()+15,mainColor);
Rect rect = new Rect((int)this.getLeft()-15, (int)this.getTop()-15,60,60);
this.setBoundBox(rect);
}
@Override
public void moveShapes(DrawView dv) {}
}