Перетащите фигуры в Android Studio Java - PullRequest
0 голосов
/ 29 января 2020

Я написал приложение на 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) {}
}
...