java - 如何使用 "long"颜色?

标签 java android colors android-8.0-oreo

Android API 26 引入了处理 color 的新方法:

Color longs are a representation introduced in Android O to store colors in different color spaces, with more precision than color ints.

现在我们可以使用新的颜色空间,像这样:

    long longGreenColor = Color.pack(0.0f, 3.1415f, 0.0f, 1.0f, ColorSpace.get(ColorSpace.Named.LINEAR_EXTENDED_SRGB));

不错,很长的颜色。现在怎么办?

  • 不能用于android.graphics.Canvas
  • 不能用于android.graphics.Paint
  • 不能用于android.graphics.Bitmap

绘图时如何使用长颜色?

例如:

    Bitmap bitmap = Bitmap.createBitmap(20, 20, Bitmap.Config.RGBA_F16, true, ColorSpace.get(ColorSpace.Named.LINEAR_EXTENDED_SRGB));
    long longColor = Color.pack(0.0f, 3.1415f, 0.0f, 1.0f, ColorSpace.get(ColorSpace.Named.LINEAR_EXTENDED_SRGB));

    bitmap.eraseColor(longColor);//ERROR
    bitmap.eraseColor(Color.toArgb(longColor));//BAD!
    bitmap.eraseColor((int) longColor);//WRONG!!!

    Paint paint = new Paint();
    paint.setColor(longColor);//ERROR

    Canvas canvas = new Canvas(bitmap);
    canvas.drawPoint(1, 1, paint);

最佳答案

我知道这个问题已经过了很长时间(不是 ColorLong :D ),但是您是否进一步向下滚动了文档?...

有一个dedicated section in Color关于这些颜色。

例如你可以使用静态方法Color.valueOf(long)long 转换为 Color 或者只使用非静态方法 Paint.setColor(long)直接使用它。

您可以使用静态 Color.pack(float, float, float) 创建类型为 long 的颜色例如。那是在Encoding section .

Decoding section它说您可以使用诸如静态 Color.alpha(long) 之类的方法获取 long 颜色的分量(在本例中为 alpha 分量)。

希望对您有所帮助。

关于java - 如何使用 "long"颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44490889/

相关文章:

java - jTable -Java 上的点击事件

android - Android 上的 SwitchCompat 渲染问题

javascript - 动态改变D3节点的颜色(力向图)

html - 同一 HTML 页面上的不同颜色链接

css - 如何设置 css 在访问链接后不松散悬停效果?

java - 在 MongoDB 上以日期格式保存 json 日期字段

java - 如何降低 boolean 表达式的复杂性?

java - 在面向对象理论中,派生类应该继承父对象的接口(interface)吗?

android - 应用程序未显示错误但崩溃

android - 为什么在 View 和处理程序上发布和取消可运行会导致不同的行为?