Android,彩色滤镜仅适用于预览

时间:2017-07-31 08:10:01

标签: android android-drawable android-color

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

我需要动态更改颜色,所以我尝试将ColorFilter添加到drawable中。

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

这是我在预览工具栏中获得的内容

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

enter image description here

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

我尝试使用layertype软件,但是没有用。

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

1 个答案:

答案 0 :(得分: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"/>