【问题标题】:Android, color filter only works in previewAndroid,滤色器仅在预览中有效
【发布时间】:2017-07-31 08:10:00
【问题描述】:

我正在尝试获得一个带有渐变笔触的白色椭圆形,有点像彩色阴影。

我需要动态更改颜色,所以我尝试将 ColorFilter 添加到可绘制对象中。

        Drawable pulseDrawable = getResources().getDrawable(R.drawable.touch_circle);
        pulseDrawable.setColorFilter(App.userColor, PorterDuff.Mode.LIGHTEN);
        setBackground(pulseDrawable);

这是我在预览工具栏中看到的

但是当我运行应用程序时,我得到了这个,(使用油漆画得很差):

圆圈很好,但不是颜色而是添加发光/阴影。它用蓝色填充了视图的其余部分。

我尝试管理 layertype 软件,但没有成功。

那么为什么预览渲染很好,而运行应用程序却不行?有没有办法解决这个问题?我也愿意接受其他解决方案,例如在没有位图的情况下以编程方式绘制形状

【问题讨论】:

  • 可能是 API 版本的差异。您的手机上使用的是哪个 Android 版本?
  • 过滤模式改为PorterDuff.Mode.SRC_IN
  • @TusharGogna Android 5.1 使用构建工具 26.0.1
  • @AjilO。 SRC_IN 给了我一个蓝色圆圈,我只想要蓝色的“阴影”。所以 Lighten 会给我导致白色 + 任何东西 = 白色
  • 你把模式改成SCR_IN后运行了吗?我不相信预览中的输出...

标签: android android-drawable android-color


【解决方案1】:

我希望这是你想要的。我创建了一个drawable。你可以玩弄这些价值观,直到你得到适合你的东西。

shadow.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape android:shape="oval">
            <size
                android:width="100dp"
                android:height="100dp"/>
            <gradient
                android:startColor="#eee"
                android:endColor="#0FFF"
                android:gradientRadius="45%"
                android:type="radial"/>
        </shape>
    </item>
    <item
        android:left="22dp"
        android:bottom="22dp"
        android:top="22dp"
        android:right="22dp">
        <shape
            android:shape="oval">
            <solid android:color="#FFF"/>
        </shape>
    </item>
</layer-list>

在运行时更改颜色的代码

imgView = (ImageView) findViewById(R.id.imgView);
Drawable bg = ContextCompat.getDrawable(getApplicationContext(), R.drawable.shadow);
int color = ContextCompat.getColor(getApplicationContext(), R.color.colorAccent);
bg.setColorFilter(color, PorterDuff.Mode.SRC_IN);
imgView.setBackground(bg);

这是 imageView 的代码

<ImageView
    android:id="@+id/imgView"
    android:layout_gravity="center"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:src="@drawable/shadow"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多