【问题标题】:Android - Lightweight GradientsAndroid - 轻量级渐变
【发布时间】:2018-08-05 02:54:57
【问题描述】:

来自 Android 的开发者参考:

LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile)

所以我想知道是否有办法在onDraw() 方法中绘制渐变? 这里的问题是我需要为要绘制渐变的任何内容输入坐标。如果我需要在不同大小和位置的多个形状上使用相同的渐变怎么办?更重要的是,如果我绘制渐变的形状改变了它的位置怎么办?甚至 Android Studio 也建议您不要在 onDraw() 方法中初始化变量。

谢谢!

【问题讨论】:

    标签: android canvas gradient ondraw


    【解决方案1】:

    我能做的是在.xml 文件中创建一个带有渐变的drawable。

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape>
                <gradient
                    android:startColor="@android:color/holo_blue_light"
                    android:endColor="@android:color/holo_red_dark"
                    android:angle="45"/>
            </shape>
        </item>
    </selector>
    

    然后在您的onDraw() 中执行(显然在 init 函数中,因为您只需要初始化一次,至少我这样做了):

    Drawable d = ContextCompat.getDrawable(context, R.drawable.indicator_active);
    

    要画它,就这样做

    d.setBounds(l, t, r, b);
    d.draw(canvas);
    

    如果有人知道更简单/更灵活的方法,请告诉我!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 2016-01-20
      相关资源
      最近更新 更多