【问题标题】:How can I make an ImageView that doesn't draw the transparent parts of the image?如何制作不绘制图像透明部分的 ImageView?
【发布时间】:2019-09-10 08:30:55
【问题描述】:

我需要我的自定义 ImageView(称为 ItemAnimationView)不绘制其图像的任何透明部分。

我将这个类用于很多实例和很多不同的图像,所以如果我只能使用我可以在 ImageView 上调用的方法来解决这个问题,那将是最好的,因为手动编辑所有不同的图像不会工作。

那么有没有某种ColorFilter 不仅会过滤掉某种颜色,而且会过滤掉任何程度透明的每个像素?

如果有一种方法可以在不访问实际位图的情况下执行此操作,那将非常方便,因为到目前为止我用于视图的唯一代码行是

setImageResource(item.getResourceID());

还有一些动画,所以我没有关联的Bitmap 对象。

【问题讨论】:

  • "I need my custom ImageView (called ItemAnimationView) to not draw any part of its image that is transparent." - 这里的“透明”是什么意思? (阿尔法通道!= 255)?
  • 没错。我只想查看具有 alpha 值 255 的像素。
  • 尝试使用ColorMatrixColorFilter - 我认为你可以,但你需要在谷歌上搜索一下颜色矩阵(并阅读android.graphics.ColorMatrix官方文档)
  • 3 分钟谷歌搜索给出:quasimondo.com/colormatrix/ColorMatrix.as - 它具有 thresholdAlpha 功能 - 但我不知道它是如何工作的(或者即使它是同一个矩阵)
  • 我有点理解,但问题是该方法有一个输入,而 java ColorMatrixFilters 只提供了在没有任何参数的情况下缩放和转换值的机会。如果我可以使用原始 alpha 值作为自定义数学函数的参数,我就会知道如何解决这个问题......

标签: android imageview alpha colorfilter


【解决方案1】:

我使用ColorMatrixColorFilter 和这个矩阵达到了预期的效果:

{1f,0f,0f,0f,0f,
0f,1f,0f,0f,0f,
0f,0f,1f,0f,0f,
0f,0f,0f,256f,-256*254};

【讨论】:

  • 当我现在看到它时,怎么办:0、0、0、256、-256 * 255?我的意思是factor=256threshold=255? (或者阈值=254)?
  • 确实 - 我做了一个快速测试 - 0, 0, 0, 256, -256 * 254 是你需要的
  • 谢谢,我更新了答案(假设 254 不是拼写错误,还是应该是 255)?
  • 首先我尝试了 255,但结果发现每个像素都消失了 - 如果你看到 alpha 的计算方式:A’ = p*R + q*G + r*B + s*A + t - 在你的情况下是A’ = 0*R + 0*G + 0*B + 256*A + (-256 * 255),即:A’ = 256 * A - 256 * 255 - 所以如果 A == 255 然后是 A' == 0 但对于 254 它是:A’ = 256 * A - 256 * 254A == 255 A’ == 255 和 0 对于任何其他 A
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
相关资源
最近更新 更多