2016-10-18 12 views
0

私は、ファイル内のlayers.xml層-リストを持っている:アンドロイド:どのようにレイヤーリスト内GradientDrawableのサイズを変更するには、プログラム

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/outer_rect"> 
    <shape android:shape="rectangle"> 
     <stroke 
       android:width="3dp" 
       android:color="@color/gray4"/> 
     <solid android:color="@color/white"/> 
    </shape> 
</item> 
<item android:top="10dp" android:bottom="10dp" android:left="10dp" android:right="10dp" 
     android:drawable="@drawable/dot_pattern_bitmap"/> 
</layer-list> 

これは、カスタマイズでframeLayout customView.xmlで使用されます。

<merge xmlns:android="http://schemas.android.com/apk/res/android"> 
    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:src="@drawable/layers"/> 
</merge> 

それ自体が使用されます。 in

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="@dimen/space_m" 
    android:orientation="vertical"> 

<my.namespace.customView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

</FrameLayout> 

さらに、私はcustomView(特にレイヤー)の動作を編集するためにCustomView.javaクラスを持っています。

そこには、customViewのサイズとパラメータ 'ratio'に応じてレイヤリストのサイズを更新しようとしています。私は次のように試しました:

だから、それはたくさんのコードでした...残念ながら、これは正しく動作しません。フレームレイアウトが最初にロードされた場合、非常に小さな矩形しか見ることができません。

私は前後に、このビューに切り替える場合のみ、私が望んでいたとして、サイズが適用されます。

誰もがアイデアを持っていますか?

+0

イメージビューを幅のmatch_parentに設定します。 –

+0

ImageView自体の幅はmatch_parentです。含まれているビューではありませんが、幅と高さ、幅のみ、またはnone(投稿されたもの)の両方についてmatch_parentを試しました。これは変更されません。 – Caro

+0

FrameLayoutでは、wrap_contentです。 –

答えて

0

最後に、私は自分自身で答えを見つけました。 :) 実際、それはかなり簡単でした。私は

final LayerDrawable ld = 
    (LayerDrawable) ContextCompat.getDrawable(getContext(), R.layers); 

によって層ドロウアブルのホールドを得ていたとき、私は唯一の一般的なリソース、画像描画可能のためではない、私の具体的なSRCを得ていました。カスタムビューの初期化でImageViewにID「レイヤー」を指定してコードを変更したところ、期待通りに機能しました。

@Override 
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) { 
    layoutWidth = MeasureSpec.getSize(widthMeasureSpec); 
    layoutHeight = MeasureSpec.getSize(heightMeasureSpec); 

    readjustSize(ratio); 

    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 

EDIT:Androidのバージョン> = 6.0でしか動作

はまた、私はonMeasureのメソッドを呼び出すの順序を変更する必要がありました。古いバージョンでは、私はまだ質問に記載されているのと同じ問題があります。

関連する問題