【问题标题】:Drawing rectangle on ImageView - not drawing upwards/leftwards在 ImageView 上绘制矩形 - 不向上/向左绘制
【发布时间】:2015-10-02 09:12:25
【问题描述】:

我创建了一个扩展 ImageView 的类,允许我在触摸时在 ImageView 上绘制矩形。

我可以绘制矩形,但它们仅在我从起点向下和向右拖动矩形时才会显示。

如果我从起点向上或向左拖动矩形,则不会绘制矩形。 OnDraw() 触发但没有显示。

我的班级:

public class TagImageView extends ImageView {

    private float downX;
    private float downY;
    private float upX;
    private float upY;
    private Paint paint;

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

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

    public TagImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    private void init() {
        paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(3);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        switch (action) {
        case MotionEvent.ACTION_DOWN:   
            downX = event.getX();
            downY = event.getY();
            invalidate();            

            return true;
        case MotionEvent.ACTION_MOVE:
            upX = event.getX();
            upY = event.getY();
            invalidate();

            return true;
        case MotionEvent.ACTION_UP:
            invalidate();

            return true;
        case MotionEvent.ACTION_CANCEL:
            break;
        default:
            break;
        }      

        return super.onTouchEvent(event);
    }

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawRect(downX, downY, upX, upY, paint);
    }
}

编辑:不确定这是否相关? https://stackoverflow.com/a/24168545/2380071

【问题讨论】:

  • 你能在onDraw期间调试和检查downXdownYupXupY中的wat值吗?或者简单地在onDraw 方法中写入Log.d 并检查值
  • 是的,它们似乎有效,在没有绘制任何内容的情况下:591、1225、274、965。在绘制矩形的情况下,downX
  • downXdownY 是矩形的 startXstartY。我相信这应该总是大于endXendY,在你的情况下是upXupY尝试通过canvas.drawRect(upX, upY,downX, downY, paint);如果upXupY>而不是downXdownY。希望这有效
  • 感谢@Panther 的建议。如果我实施了您的建议,那么我相信如果我从起点向下和向右绘制矩形(意味着 upX > downX 或 upY > downY),我会遇到同样的问题。我相信我必须检查 downX 和 downY 是否小于或大于 upX 和 upY 然后进行相应处理。

标签: java android touch-event ondraw


【解决方案1】:

好吧,我刚刚修改了我的 OnDraw() 方法来检查 downX、downY 和 upX、upY 点的值。微不足道,真的......虽然不确定它是否是最有效的。欢迎提出任何建议(或者,呃..指针)!

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (downX < upX && downY < upY)
        canvas.drawRect(downX, downY, upX, upY, paint);
    else if (downX > upX && downY < upY)
        canvas.drawRect(upX, downY, downX, upY, paint);
    else if (downX < upX && downY > upY)
        canvas.drawRect(downX, upY, upX, downY, paint);
    else
        canvas.drawRect(upX, upY, downX, downY, paint);
}

【讨论】:

  • 确保图像上没有任何其他图层,否则会返回错误的位置
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 2018-07-06
相关资源
最近更新 更多