Android:触摸时使位图消失

时间:2014-03-20 20:09:48

标签: android bitmap ontouchevent

按原样,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
}}

帮助?

1 个答案:

答案 0 :(得分:1)

你的onTouchEvent实际上没有做任何重要事情,你没有圆形对象的概念。

onDraw应该真正从之前创建的数组/列表中绘制这些圆圈 - 例如List&lt; MyCircles&gt;或MyCircles []。在触摸时,您可以遍历所有圈子,直到找到最接近的圈子,从阵列或列表中删除该圈子,然后无效。

没有任何事情发生的原因是即使你在onTouchEvent中再次绘制这些圆圈,你也会在onDraw中重新绘制所有内容(invalidate()调用draw / onDraw)。

理想情况下,在初始化程序中创建圆圈列表,在onDraw中绘制它们,然后在onTouch中更新它们(即删除)。可能有一种更简单的方法可以做到这一点,但这至少是一种更恰当的方法。