部分视图失效无法按预期工作

时间:2012-09-19 18:42:21

标签: android android-custom-view

在尝试处理自定义视图时,我正在尝试处理触摸事件和部分失效。为此,它只是一行数字,以正方形间隔填充屏幕。

现在,当我按下一个块时,我会使用这个块来获取块的矩形:

private Rect getDirtyRegion(float e){
    // The value is the slot number
    mValue = ((int)e / mBlockSize);

    // start X of the "stall"
    int x1 = mValue * mBlockSize;
    int y1 = 0;

    int x2 = x1 + mBlockSize;
    int y2 = getMeasuredHeight();

    return new Rect(x1, y1, x2, y2);
}

它按预期工作。当屏幕上只有几个时,效果很好。这是我的onTouchEvent

@Override
public boolean onTouchEvent(MotionEvent e){        

    switch(e.getAction()){
    case MotionEvent.ACTION_DOWN:
        Log.d(TAG, "ActionDown");

        setPaint(PinEntry.PAINT_PRESSED);
        invalidate(getDirtyRegion(e.getX()));
        break;

    case MotionEvent.ACTION_UP:
    case MotionEvent.ACTION_CANCEL:

        setPaint(PinEntry.PAINT_NORMAL);
        invalidate();
        break;
    }
    return true;
}

(这已经被重写了很多次,所以在没有矩形的情况下调用invalidate的情况并非总是如此。)

我所追求的是,​​当我点击一个数字时,它会重新绘制以表示我在setPaint中所做的任何一种压缩状态。当我释放时,重置。

当我在ScrollView中有多个视图时,它会中断。当我按下并释放,甚至拖出界限(触发ACTION_CANCEL)时,它会重置。但是,返回该行会导致整个事件无效,因为“已按下”。

这是TouchEvent逻辑问题,绘图问题,还是我在创建自定义视图方面缺乏经验的一些组合?

1 个答案:

答案 0 :(得分:0)

我最终将它拆分为两个不同的类,一个用于容器(父级),另一个用于每个单独的块,并使用draw(Canvas)类的View方法。