如何改变ImageView中触摸区域的颜色?

How to change the color of a touched region in ImageView?

我需要将用户在 ImageView 上触摸的区域设置为白色。如果我将 setOnTouchListener 设置为 ImageView 并获取触摸的 x 和 y 位置,我该如何更改 ImageView 中的适当像素值?或者有更好的解决方案吗?

我认为最简单的解决方案是扩展 ImageView

这是一个在触摸区域周围绘制黑色圆圈的简短示例:

class TouchableImageView extends ImageView {
    private float x, y;
    private Paint paint;

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

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

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

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public TouchableImageView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init();
    }

    void init() {
        paint = new Paint();
        paint.setColor(Color.BLACK);
        paint.setAntiAlias(true);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
      if (event.getAction() == MotionEvent.ACTION_DOWN) {
        x = event.getX();
        y = event.getY();
        invalidate();
      }
        return super.onTouchEvent(event);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        //Just for example - draw a circle around touch area:
        if(x!=0 || y!=0)
        canvas.drawCircle(x, y, 25, paint);
    }
}

编辑:

如果您想将结果保存为位图 - 您还需要执行几个步骤,如 here and here 所述。

简而言之,您应该按照以下步骤操作:

  1. 创建所需大小的新位图
  2. 为创建的位图创建新的 canvas - new Canvas(bitmap)
  3. 在此基础上重新绘制所有你需要的canvas
  4. 将位图保存为图形文件