标签: porter-duff

PorterDuff.Mode在android图形中意味着什么.它做什么?

我想知道PorterDuff.Mode在android图形中的含义.

我知道这是一种转移模式.

我也知道,它有DST_IN,Multiply等属性.

graphics android porter-duff

140
推荐指数
2
解决办法
5万
查看次数

在框架中掩蔽(裁剪)图像

有一个丰富的UI应用程序,我想在其中显示具有这种复杂形状的图像

在此输入图像描述

现在我想要的是根据蒙版图像裁剪我的图像,实际上图像是动态的,可以从相机或图库(方形或矩形)导入,我希望该图像适合我的布局框架,如上所述

所以只是想知道我如何实现这一目标?任何想法/暗示欢迎

背景框架
在此输入图像描述
面具
在此输入图像描述

这样

android image bitmap masking porter-duff

82
推荐指数
2
解决办法
4万
查看次数

在View上启用HW加速,在矩形覆盖中打孔

我有一个视图,它做了一些基本的绘图.在此之后,我想绘制一个打孔的矩形,这样只能看到上一个图形的一个区域.我想为我的视图启用硬件加速以获得最佳性能.

目前我有两种方法可以工作,但只有在禁用硬件加速时才有效,而另一种方法太慢.

方法1:SW加速(慢)

final int saveCount = canvas.save();

// Clip out a circle.
circle.reset();
circle.addCircle(cx, cy, radius, Path.Direction.CW);
circle.close();
canvas.clipPath(circle, Region.Op.DIFFERENCE);

// Draw the rectangle color.
canvas.drawColor(backColor);

canvas.restoreToCount(saveCount);
Run Code Online (Sandbox Code Playgroud)

这不适用于为视图启用的硬件加速,因为在此模式下不支持'canvas.clipPath'(我知道我可以强制SW渲染,但我想避免这种情况).

方法2:硬件加速(V.慢速)

// Create a new canvas.
final Bitmap b = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
final Canvas c = new Canvas(b);

// Draw the rectangle colour.
c.drawColor(backColor);

// Erase a circle.
c.drawCircle(cx, cy, radius, eraser);

// Draw the bitmap on our views  canvas.
canvas.drawBitmap(b, 0, 0, null);
Run Code Online (Sandbox Code Playgroud)

橡皮擦创建的地方

eraser = new Paint()
eraser.setColor(0xFFFFFFFF); …
Run Code Online (Sandbox Code Playgroud)

graphics android drawing hardware-acceleration porter-duff

35
推荐指数
1
解决办法
9906
查看次数

我想为imageview添加一个颜色过滤器

我想一个补充ColorFilterImageView.

目前我正在使用:

ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
iv.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
Run Code Online (Sandbox Code Playgroud)

我检查了多种模式PotterDuff,如SRC_IN,SRC等,但我没有得到任何的模式有什么区别...所有模式将整个ImageView完美的红色.

我需要在现有图像中混合使用RED颜色,这样图像看起来就会带有REDDISH色调....

android android-imageview porter-duff

23
推荐指数
4
解决办法
6万
查看次数

在画布上绘图 - PorterDuff.Mode.CLEAR绘制黑色!为什么?

我正在尝试创建一个简单的自定义视图:有一个由弧路径显示的位图 - 从0deg到360deg.学位正在随着一些FPS而变化.

所以我使用重写onDraw()方法创建了一个自定义视图:

@Override
protected void onDraw(Canvas canvas) {

    canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
    arcPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
    canvas.drawArc(arcRectF, -90, currentAngleSweep, true, arcPaint);
    arcPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(bitmap, circleSourceRect, circleDestRect, arcPaint);
}
Run Code Online (Sandbox Code Playgroud)

arcPaint 初始化如下:

arcPaint = new Paint();
arcPaint.setAntiAlias(true);
arcPaint.setColor(Color.RED); // Color doesn't matter
Run Code Online (Sandbox Code Playgroud)

现在,一切都很棒,但是...整个视图中的背景是黑色的.

如果我设置canvas.drawColor(..., PorterDuff.Mode.DST)并省略canvas.drawBitmap()- 在透明背景上正确绘制圆弧.

我的问题是 - 如何设置PorterDuff模式以使其与透明度一起工作?

当然bitmap是具有alpha通道的32位PNG.

android drawing canvas porter-duff

21
推荐指数
2
解决办法
2万
查看次数

Android ColorFilter - Porter-Duff模式

我正在尝试解决android的问题ColorFilters.文档很差,所以主要方法是尝试不同的变体.

问题:

有一个位图.一些像素具有alpha = 255,其他像素具有alpha = 0.我正在尝试绘制一个具有特定颜色的圆圈.我想在位图中不改变alpha通道,但在绘图时我想将颜色乘以位图-α.

因此,在绘制圆形时,我希望不绘制alpha = 0的像素,但是alpha = 255的像素要涂上我想要的颜色.Alpha通道不应该改变.

我正在尝试使用porter-duff ColorFilter(android sdk中的PorterDuffColorFilter类).

官方网站上有太多的模式和不可理解的描述:http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html

我想我应该使用DST_ATOPSRC_ATOP,但它们不像我描述的那样工作.

此外,srcColor在porter-duff colorfilter的构造函数中有一个奇怪的参数.

我无法理解"Sa"和"Sc"在公式中的含义[Da, Sc * Da + (1 - Sa) * Dc].它可以来自传递给colorfilter构造函数的颜色,也可以通过"paint.setColor"进行颜色设置.

谁知道,它是如何工作的?

android colors filter colorfilter porter-duff

14
推荐指数
2
解决办法
2万
查看次数

Android中的PorterDuff颜色效果,用于给定视图下的视图

是否有可能在Android中设置一个视图,它将一些颜色过滤器应用于其边界内可见的所有内容?就像在这个例子中:

过滤视图

只是一个简单的矩形视图,可以反转其下方所有内容的颜色.当然,当用户滚动列表时,它也会反映在倒置框中.有没有一些简单的方法来使用彩色滤镜,PorterDuff模式等?

android colorfilter porter-duff

13
推荐指数
1
解决办法
4518
查看次数

Porter-Duff:不同形状的不同行为?

我有以下布局:

            <LinearLayout
                android:id="@+id/myButton"
                android:layout_width="@dimen/logo_radius"
                android:layout_height="match_parent"
                android:background="@drawable/myShape">

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/driver_half"/>
            </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

和以下myShapedrawable:

    <selector>   
        <item><shape android:shape="oval">
            <stroke android:color="@android:color/black" android:width="4dp"/>
            <solid android:color="@android:color/white" />
        </shape></item>
    </selector>
Run Code Online (Sandbox Code Playgroud)

我应用了以下过滤器:

myButton.getBackground().setColorFilter( orange, PorterDuff.Mode.ADD );
Run Code Online (Sandbox Code Playgroud)

结果看起来那样:

在此输入图像描述

然后我将myShape改为圆角矩形:

    <selector>
        <item>
            <shape
                android:shape="rectangle">
                <corners android:bottomLeftRadius="@dimen/logo_radius" android:bottomRightRadius="2dp" android:topLeftRadius="@dimen/logo_radius" android:topRightRadius="2dp"/>
                <stroke
                    android:width="4dp"
                    android:color="@android:color/black"/>
                <solid android:color="@android:color/white"/>
            </shape>
        </item>
    </selector>
Run Code Online (Sandbox Code Playgroud)

结果看起来像:

在此输入图像描述

左边部分没有应用过滤器,右边部分没有过滤器.

我想得到什么:

在此输入图像描述

如何使用Porter-Duff过滤器正确绘制边框橙色?还有其他选择吗?

android shape porter-duff

13
推荐指数
1
解决办法
741
查看次数

DrawableCompat.setTint(可绘制,颜色)与Drawable.setColorFilter(颜色,模式)

这两个实现之间有什么区别?

DrawableCompat.setTintMode(wrappedDrawable, Mode.SRC_ATOP);
DrawableCompat.setTint(wrappedDrawable, color);
Run Code Online (Sandbox Code Playgroud)

drawable.setColorFilter(color, Mode.SRC_ATOP);
Run Code Online (Sandbox Code Playgroud)

android drawable android-appcompat porter-duff

11
推荐指数
0
解决办法
1523
查看次数

如何在Android中用XML创建"矩形内部透明圆"形状?

我正在尝试在我的应用中创建以下设计.

设计样机
(https://photos.google.com/share/AF1QipPhCGTgf9zi7MetWJYm0NQ14c3wqzjqnEwxsajCFHEjqzt5R29qYvIjZ2C71q7EnQ?key=WUZKSXA1WVVwSlI2LVdTQy1IRjdUdzVuQlpCY0Rn)

它是主UI上面的叠加层.尝试使用主UI顶部的布局创建它,其背景为以XML创建的半透明形状.然而,即使阅读了多篇文章,我也无法弄明白.

我尝试了以下方法,但它没有用.创建一个200dp笔划的环形,并将其设置为imageview的源,然后将scaletype设置为centerCrop,但形状不像位图那样缩放.

形状XML:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadius="0dp"
    android:shape="ring"
    android:thicknessRatio="2"
    android:useLevel="false" >

    <solid android:color="@android:color/transparent" />

    <stroke
        android:width="200dp"
        android:color="#80000000" />
</shape>
Run Code Online (Sandbox Code Playgroud)

叠加布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/onboarding_background"
        android:scaleType="centerCrop"/>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

有关如何执行此操作或代码的任何指示都非常有用.

android porter-duff

11
推荐指数
1
解决办法
8212
查看次数