java - 无法使用吸管工具从位图中选择颜色(android studio/java)
问题描述
我正在 android studio 中制作绘图应用程序,但我遇到了互联网搜索无法解决的问题。我有一个工具菜单,滴管就是其中之一。我需要以下功能:
- 单击吸管工具
- 按画布/位图/屏幕并从中检索颜色
- 按压结束后,继续使用画笔重新绘制新颜色(自动切换到画笔)
这是我为该工具制作的方法,但它有问题:(注释行是我也尝试过的另一种方法,它产生相同的结果)
public void dropSelectColor(View v){
// this.setDrawingCacheEnabled(true);
v.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// Bitmap bitmapTemp = getDrawingCache(true);
// int color = bitmapTemp.getPixel((int)v.getX(), (int)v.getY());
//get the color from the currently used global bitmap that is painted on
int color = bitmap.getPixel((int)v.getX(), (int)v.getY());
Toast.makeText(getContext(),"Color : " + color,Toast.LENGTH_SHORT).show();
setDrawingColor(color);
//invalidate the listener so the next touch will paint on the screen again
v.setOnTouchListener(null);
return true;
}
});
}
上述方法执行以下操作:
- 单击吸管一次
- 触摸仍然在屏幕上绘制颜色
- 再次点击吸管
- 它立即敬酒“0”
- 在我更改画笔的线宽(再次激活绘画)之前,进一步的触摸不再在画布上绘画
我使用的位图是一个在这里初始化的全局变量:
public void init(DisplayMetrics metrics, Bitmap bitmap) {
int height = metrics.heightPixels;
int width = metrics.widthPixels;
if (bitmap == null) {
// create a new bitmap
this.bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
} else {
// load a bitmap from image in the gallery
this.bitmap = Bitmap.createBitmap(bitmap);
}
paintLine = new Paint();
paintLine.setAntiAlias(true);
paintLine.setDither(true);
paintLine.setStrokeJoin(Paint.Join.ROUND);
paintLine.setStyle(Paint.Style.STROKE);
paintLine.setColor(Color.BLACK);
paintLine.setStrokeWidth(1);
paintLine.setStrokeCap(Paint.Cap.ROUND);
paintLine.setXfermode(null);
paintLine.setAlpha(0xff);
path = new ArrayList<>();
undo = new ArrayList<>();
}
有什么我想念的吗?这仍然是新的,虽然我可以使用许多功能来工作,但这个给我带来了一些挑战。我在 Stack 上看到了很多关于这个主题的问题,但我找不到有效的解决方案。
解决方案
推荐阅读
- vba - 如何使用 catscript 搜索、选择和删除草图中的所有几何图形?
- angular - 文档未在 Angular Universal 上定义,更改不会被保存
- angular - Angular 6数据表如何从字符串中留下空格
- android - 如何为 Android 编译 OpenSSL 1.1.1
- python - 失败的质数检查器
- sql - INSERT INTO ... SELECT 具有更多 SELECT 列
- c++ - 使用不兼容的分配器复制分配无序映射
- r - cluster walktrap 返回三个社区,但在绘制时它们都在彼此之上,没有可见的聚类
- qt - 如何在 Qt QML 中从“onEditingFinished”更改文本字段属性
- jquery - 替换其他选择框的选择选项列表值