我无法将渐变背景应用于LinearLayout。
这应该比我读过的内容相对简单,但它似乎不起作用。为了参考,我正在开发2.1-update1。
header_bg.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="90"
android:startColor="#FFFF0000"
android:endColor="#FF00FF00"
android:type="linear"/>
</shape>
main_header.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="50dip"
android:orientation="horizontal"
android:background="@drawable/header_bg">
</LinearLayout>
如果我将@ drawable / header_bg更改为颜色 - 例如#FF0000它完美无缺。我错过了一些明显的东西吗?
答案 0 :(得分:376)
好的,我已经设法使用选择器解决了这个问题。请参阅以下代码:
main_header.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="50dip"
android:orientation="horizontal"
android:background="@drawable/main_header_selector">
</LinearLayout>
main_header_selector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<gradient
android:angle="90"
android:startColor="#FFFF0000"
android:endColor="#FF00FF00"
android:type="linear" />
</shape>
</item>
</selector>
希望这有助于遇到同样问题的人。
答案 1 :(得分:58)
也可以有第三种颜色(中心)。和各种形状。
例如在drawable / gradient.xml中:
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#000000"
android:centerColor="#5b5b5b"
android:endColor="#000000"
android:angle="0" />
</shape>
这给你黑色 - 灰色 - 黑色(从左到右),这是我最喜欢的黑暗背景atm。
请记住在layout xml中添加gradient.xml作为背景:
android:background="@drawable/gradient"
也可以旋转,使用:
角= “0”
给你一条垂直线
和
angle =“90”
给你一条水平线
可能的角度是:
0,90,180,270。
也有几种不同的形状:
机器人:形状= “矩形”
圆形:
机器人:形状= “椭圆形”
并且可能还有一些。
希望它有所帮助,欢呼!
答案 2 :(得分:27)
在XML可绘制文件中:
AuthorizedKeysFile .ssh/authorized_keys
在你的布局文件中:android:background =&#34; @ drawable / gradient_background&#34;
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<gradient android:angle="90"
android:endColor="#9b0493"
android:startColor="#38068f"
android:type="linear" />
</shape>
</item>
</selector>
答案 3 :(得分:18)
尝试删除android:gradientRadius =“90”。这是一个适合我的方式:
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<gradient
android:startColor="@color/purple"
android:endColor="@color/pink"
android:angle="270" />
</shape>
答案 4 :(得分:9)
更改数组中的颜色值
val gradientDrawable = GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM,
intArrayOf(Color.parseColor("#008000"),
Color.parseColor("#ADFF2F"))
);
gradientDrawable.cornerRadius = 0f;
//Set Gradient
linearLayout.setBackground(gradientDrawable);
结果
答案 5 :(得分:6)
我的问题是.xml扩展名没有添加到新创建的XML文件的文件名中。添加.xml扩展名修复了我的问题。
答案 6 :(得分:1)
我不知道这是否会对任何人有所帮助,但我的问题是我试图将渐变设置为ImageView的“src”属性,如下所示:
<ImageView
android:id="@+id/imgToast"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:src="@drawable/toast_bg"
android:adjustViewBounds="true"
android:scaleType="fitXY"/>
不是100%肯定为什么这不起作用,但现在我改变了它并将drawable放在ImageView的父级的“background”属性中,在我的情况下是RelativeLayout,如下所示:(这个成功了)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/custom_toast_layout_id"
android:layout_height="match_parent"
android:background="@drawable/toast_bg">
答案 7 :(得分:0)
我会检查您的渐变颜色的Alpha通道。对我来说,当我测试我的代码时,我的颜色上的alpha通道设置错误,它对我不起作用。一旦我获得了alpha通道设置,它就全部工作了!
答案 8 :(得分:0)
您可以使用自定义视图来执行此操作。通过此解决方案,可以完成项目中所有颜色的渐变形状:
class GradientView(context: Context, attrs: AttributeSet) : View(context, attrs) {
// Properties
private val paint: Paint = Paint()
private val rect = Rect()
//region Attributes
var start: Int = Color.WHITE
var end: Int = Color.WHITE
//endregion
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
super.onSizeChanged(w, h, oldw, oldh)
// Update Size
val usableWidth = width - (paddingLeft + paddingRight)
val usableHeight = height - (paddingTop + paddingBottom)
rect.right = usableWidth
rect.bottom = usableHeight
// Update Color
paint.shader = LinearGradient(0f, 0f, width.toFloat(), 0f,
start, end, Shader.TileMode.CLAMP)
// ReDraw
invalidate()
}
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
canvas.drawRect(rect, paint)
}
}
我还使用以下自定义视图创建一个开源项目 GradientView :
https://github.com/lopspower/GradientView
implementation 'com.mikhaellopez:gradientview:1.1.0'
答案 9 :(得分:-1)
<?xml version="1.0" encoding="utf-8"?>
<gradient
android:angle="90"
android:startColor="@color/colorPrimary"
android:endColor="@color/colorPrimary"
android:centerColor="@color/white"
android:type="linear"/>
<corners android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"
android:topRightRadius="10dp"
android:topLeftRadius="10dp"/>