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それは完全にうまくいきます。ここで明らかな何かが足りないのですか。
わかりました私はセレクタを使用してこれを解決することができました。以下のコードを参照してください。
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>
うまくいけば、これは同じ問題を抱えている誰かに役立ちます。
3色目(中央)にすることも可能です。そしていろいろな形。
たとえば、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です。
レイアウトxmlの背景としてgradient.xmlを追加することを忘れないでください。
Android:background="@drawable/gradient"
次のように回転させることも可能です。
角度= "0"
あなたに垂直線を与えます
そしてと
角度= "90"
あなたに水平線を与える
可能な角度は以下のとおりです。
0、90、180、270。
また、形状の種類がいくつかあります。
Android:shape = "レクタングル"
丸みを帯びた形状:
アンドロイド:shape = "oval"
そしておそらくもう少し。
応援よろしくお願いします。
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:endColor="#9b0493"
Android:startColor="#38068f"
Android:type="linear" />
</shape>
</item>
</selector>
あなたのレイアウトファイルで:Android:background = "@ drawable/gradient_background"
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@drawable/gradient_background"
Android:orientation="vertical"
Android:padding="20dp">
.....
</LinearLayout>
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>
私の問題は、新しく作成されたXMLファイルのファイル名に.xml拡張子が追加されなかったことです。 .xml拡張子を追加すると私の問題は解決しました。
これが誰にも役立つかどうかはわかりませんが、私の問題は、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%確かではありませんが、今私はそれを変更し、ImageViewの親の "background"プロパティにdrawableを入れています。
<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">
グラデーションカラーのアルファチャンネルを確認します。私にとって、コードをテストしていたときに、アルファチャンネルの色が正しく設定されていなかったため、うまくいきませんでした。アルファチャンネルを設定したら、すべてうまくいきました。
それにはカスタムビューを使用できます。このソリューションにより、プロジェクト内のすべての色のグラデーション形状が完成しました。
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'