按原样,100个粉色圆圈(相同的位图)随机散布在手机屏幕上(应该如此)。当我点击其中一个圆圈时,该圆圈应该消失(更改为背景颜色)。我认为我对Android和View有一个基本的误解。我想我有几个明显的错误(对我来说不是那么明显,但我一直盯着它看,我想我需要一些帮助)。目前,屏幕显示随机圆圈,但仅此而已。触摸屏幕什么都不做。有什么更好的想法让圈子消失?它最近重新组织了所有的位图,但是我最近做了一些事情,它停了下来。位图是30px乘30px。
public class DrawV extends View {
private Bitmap bit_dot;
private int width;
private int height;
public int[] width_array = new int[100];
public int[] height_array = new int[100];
private View dotV = (View)findViewById(R.id.bigdocpic);//bitmap
Random rand = new Random();
public DrawV(Context context) {
super(context);
bit_dot = BitmapFactory.decodeResource(getResources(), R.drawable.dot_catch);
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
width = metrics.widthPixels;
height = metrics.heightPixels;
}
@Override
//draws 100 randomly placed similar bitmaps
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int height_dimension;
int width_dimension;
for (int i = 0; i < 100; i++){
height_dimension = rand.nextInt(height) + 1;
width_dimension = rand.nextInt(width) + 1;
canvas.drawBitmap(bit_dot, width_dimension, height_dimension, null);
width_array[i] = width_dimension;//
height_array[i] = height_dimension;//
}
}
@Override
public boolean onTouchEvent(MotionEvent event){
Paint p = new Paint();
p.setColor(Color.WHITE);
Path path = new Path();
Canvas c = new Canvas();
for (int i = 0; i < 100; i++){
if ((event.getX() == width_array[i]) && (event.getY() == height_array[i]))
c.drawCircle(width_array[i], height_array[i], 15, p);
}
invalidate();
return false;//false or true?
}
//set visibility of bitmap to invisible
public boolean onTouch(View v, MotionEvent event) {
dotV.setVisibility(View.INVISIBLE);
invalidate();
return false;//false or true? not understanding
}}
帮助?
答案 0 :(得分:1)
你的onTouchEvent实际上没有做任何重要事情,你没有圆形对象的概念。
onDraw应该真正从之前创建的数组/列表中绘制这些圆圈 - 例如List&lt; MyCircles&gt;或MyCircles []。在触摸时,您可以遍历所有圈子,直到找到最接近的圈子,从阵列或列表中删除该圈子,然后无效。
没有任何事情发生的原因是即使你在onTouchEvent中再次绘制这些圆圈,你也会在onDraw中重新绘制所有内容(invalidate()调用draw / onDraw)。
理想情况下,在初始化程序中创建圆圈列表,在onDraw中绘制它们,然后在onTouch中更新它们(即删除)。可能有一种更简单的方法可以做到这一点,但这至少是一种更恰当的方法。