Android:触摸时在屏幕上绘制随机圆圈

时间:2016-04-06 22:18:51

标签: android random ontouch

我正在开展一个项目,要求我在用户触摸屏幕时在屏幕上的随机位置画一个圆圈。当触摸事件发生时,它还需要删除我绘制的最后一个圆圈,以便屏幕上一次只能有一个圆圈。

我有一个圆圈,用于创建圆圈:

public class Circle extends View {
    private final float x;
    private final float y;
    private final int r;
    private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

    public Circle(Context context, float x, float y, int r) {
        super(context);
        mPaint.setColor(0x000000);
        this.x = x;
        this.y = y;
        this.r = r;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setColor(Color.RED);
        canvas.drawCircle(x, y, r, mPaint);
    }
}

这是创建新Circle的活动。它还将监控触摸事件。现在它在屏幕的左上角画一个圆圈,但是需要将该代码移动到onTouch方法中。我可能会使用Random计算随机数。

public class FingerTappingActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_finger_tapping);


        LinearLayout circle = (LinearLayout) findViewById(R.id.lt);
        View circleView = new Circle(this, 300, 300, 150);
        circleView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        circle.addView(circleView);


        circle.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                return true;
            }
        });

    }
}

我之前从未使用过触摸事件,也不知道如何解决这个问题。一些提示将不胜感激。

1 个答案:

答案 0 :(得分:1)

做这样的事情,

public class DrawCircles extends View {

    private float x = 100;
    private float y = 100;
    private int r = 50;
    private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setColor(Color.RED);
        canvas.drawCircle(x, y, r, mPaint);
    }

    public DrawCircles(Context context) {
        super(context);
        init();
    }

    public DrawCircles(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public DrawCircles(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    void init() {
        mPaint.setColor(0x000000);
        // logic for random call here;
    }

    Random random = new Random();

    void generateRandom() {
        int minRadius = 100;
        int w = getWidth();
        int h = getHeight();
        this.x = random.nextInt(w);
        this.y = random.nextInt(h);
        this.r = minRadius + random.nextInt(100);
    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        generateRandom();
        invalidate();
        return super.onTouchEvent(event);
    }
}

此视图将在视图内绘制随机圆圈。为生成x&进行一些调整y坐标。将此视图添加到xml然后它将起作用。