Перемещать шарик по сетке в случайном порядке на холсте Android - PullRequest
2 голосов
/ 11 февраля 2020

Требуется, чтобы шар двигался по пути сетки, сгенерированному в Canvas. Я создал сетку на холсте, но не в состоянии понять, как перемещать шар случайным образом, что означает, что начальная точка шоу будет отличаться на пути. Я делюсь тем, что я сделал. Я также нарисовал шар на экране, но не понял, как правильно расположить шар на линии сетки и начать его движение

public class PixelGridView extends View {

    //number of row and column
    int horizontalGridCount = 11;

    private Drawable horiz;
    private Drawable vert;
    private final float width;
    long mInterpolateTime;
    PointF mImageSource = new PointF();


    public PixelGridView(@NonNull Context context) {
        this(context, null);
    }

    public PixelGridView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        horiz = new ColorDrawable(Color.WHITE);
        horiz.setAlpha(160);
        vert = new ColorDrawable(Color.WHITE);
        vert.setAlpha(160);
        width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, .9f, context.getResources().getDisplayMetrics());
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        horiz.setBounds(left, 0, right, (int) width);
        vert.setBounds(0, top, (int) width, bottom);
    }


    private float getLinePosition(int lineNumber) {
        int lineCount = horizontalGridCount;
        return (1f / (lineCount + 1)) * (lineNumber + 1f);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //drawTask.start();
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.WHITE);
        paint.setAntiAlias(true);
        canvas.drawCircle(120, 110, 10, paint);

        int count = horizontalGridCount;

        for (int n = 0; n < count; n++) {
            float pos = getLinePosition(n);
            // Draw horizontal line
            canvas.translate(0, pos * getHeight());
            Log.e("Position1", "" + pos * getHeight());
            horiz.draw(canvas);
            canvas.translate(0, -pos * getHeight());
            // Draw vertical line
            canvas.translate(pos * getHeight(), 0);
            Log.e("Position2", "" + pos * getHeight());
            vert.draw(canvas);
            canvas.translate(-pos * getHeight(), 0);
        }
    }
}[![Canvas Image][1]][1]

//MainActivity
public class PathAnimationActivity extends AppCompatActivity {

    LinearLayout rlLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_path);
        rlLayout=findViewById(R.id.rlLayout);

        PixelGridView pixelGrid = new PixelGridView(this);
        rlLayout.addView(pixelGrid);

    }

}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...