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

时间:2015-09-24 14:03:04

标签: android colors imageview android-resources ontouchlistener

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

1 个答案:

答案 0 :(得分:1)

我认为最简单的解决方案是扩展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);
    }
}

修改:

如果您想将结果保存为位图,则需要执行herehere所述的更多步骤。

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

  1. 创建所需大小的新位图
  2. 为创建的位图创建新画布 - new Canvas(bitmap)
  3. 在此画布上重新绘制所需的一切
  4. 将位图另存为图形文件