2017-02-15 28 views
0

私は下の図のように背景drawableを持っていたい。 作成方法は? enter image description here複数の斜めの背景色

+0

は、カスタム 'Shape'クラスを作成し、その' draw'メソッドをオーバーライドして、私はグラデーションをしたくない 'ShapeDrawable'コンストラクタ – pskink

答えて

2

することはできターゲットDrawableクラス(多分ColorDrawable)を拡張します。次にdraw(Canvas)の方法で台形Pathを描きます。効果を変更するには、Paintのアルファとカラーを調整します。コードは怒鳴るようなこと:

public class SDrawable extends ColorDrawable { 

    private Path mPath = new Path(); 
    private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 

    public SDrawable() { 
     init(); 
    } 

    public SDrawable(int color) { 
     super(color); 
     init(); 
    } 

    private void init(){ 
     mPaint.setColor(0x33ffffff); 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     super.draw(canvas); 
     mPath.reset(); 
     mPath.moveTo(0,0); 
     mPath.lineTo(canvas.getWidth()/2+50, 0); 
     mPath.lineTo(canvas.getWidth()/2, canvas.getHeight()); 
     mPath.lineTo(0, canvas.getHeight()); 
     mPath.lineTo(0, 0); 
     canvas.drawPath(mPath, mPaint); 
    } 

} 
+0

結果は大丈夫ですが、継承階層( 'ColorDrawable'を拡張)が好きではありませんが、' Drawable'を拡張する方が良いでしょう(しかし、そうです、より多くのコード)、またはカスタムの 'Shape'を作成して'ShapeDrawable'コンストラクタ – pskink

+0

また、バックグラウンドのホスト' View'を拡張し、上で述べたロジックを適用することができます。そのキーポイントは描画されたものすべてを超えて '台形を描画する 'ことです。 –

+0

いいえ、いいえ、いいえ、あなたの最初の解答は良いです:カスタム 'Drawable'ではなく、カスタム' View' – pskink

0

使用レイアウトの背景にあるXML drawable下に、あなたのアプリケーションのニーズを応じて、以下のdrawable XMLで色を変更します。

<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape> 
      <gradient 
       android:startColor="@color/application_background" 
       android:endColor="@color/bright_red" 
       android:angle="45"/> 
     </shape> 
    </item> 
</selector> 

上記のコードを変更して使用する方法については、以下を参照してください。

http://www.singhajit.com/gradient-color-in-android/

+0

にそれを渡します。画像をご覧ください。境界線があるはずです – user6022289

+0

は対角線で境界線が必要であることを意味します。 –

+0

はい。解決しましたか? – user6022289