如何改变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 所述。
简而言之,您应该按照以下步骤操作:
- 创建所需大小的新位图
- 为创建的位图创建新的 canvas -
new Canvas(bitmap)
- 在此基础上重新绘制所有你需要的canvas
- 将位图保存为图形文件
我需要将用户在 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 所述。
简而言之,您应该按照以下步骤操作:
- 创建所需大小的新位图
- 为创建的位图创建新的 canvas -
new Canvas(bitmap)
- 在此基础上重新绘制所有你需要的canvas
- 将位图保存为图形文件