我需要将白色设置为用户在ImageView上触摸的区域。如果我将setOnTouchListener设置为ImageView并获取触摸的x和y位置,如何更改ImageView中的相应像素值?还是有更好的解决方案?
答案 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);
}
}
修改:
如果您想将结果保存为位图,则需要执行here和here所述的更多步骤。
简而言之,您应该按照以下步骤操作:
new Canvas(bitmap)