2013-03-13 10 views
32

私はヘッダー画像でアクティビティを作成しました。このヘッダーイメージは、最初に、scaleTypeがcenterCropに設定されているImageViewを使用して、アクティビティのレイアウトxmlで作成されます。これは、私が望むことを行い、画像を中央に置き、ポートレートモードで左右にクリップし、すべてを横長モードで表示します。ImageView scaleType 'centerCrop'とビットマップ描画可能な重力の和に相当します。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingTop="30dp" 
    android:paddingBottom="6dp" 
    android:paddingLeft="6dp" 
    android:paddingRight="6dp" 
    android:background="#919EAC" 
    android:orientation="vertical" > 

<ImageView 
    android:id="@+id/header_image" 
    android:layout_width="match_parent" 
    android:layout_height="120dp" 
    android:contentDescription="@string/header_description" 
    android:scaleType="centerCrop" 
    android:src="@drawable/header" /> 

    .... <other views> ... 

私は、データを表示するために、ヘッダー画像空間を使用できるように、背景描画可能で、これを交換したいのですが、それは別の活動に同じレイアウトを繰り返し、私が保存されます。背景属性:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
     <item> 
      <shape android:shape="rectangle" > 
       <solid android:color="#919EAC" /> 
      </shape> 
     </item> 
     <item> 
      <bitmap 
       android:antialias="true" 
       android:gravity="top|center_horizontal" 
       android:src="@drawable/header" /> 
     </item> 
    </layer-list> 

この描画可能ではそうでないレイアウトが定義する有色背景を定義し、そのヘッダ画像を定義私はアンドロイドに参照することができ描画可能を作成した。このため

それ以外の場合は、ImageViewとしてレイアウトに含まれます。

しかし、今では画像が縮小されていますが、切り取ることができます。

私は、このような

android:gravity="top|clip_horizontal" 

などの他の重力モードを試してみました。しかし、静止画表示とは異なる/スケールを表示するように思わAndroidのドキュメントを確認します。

バックグラウンドドロワブルの正しい定義は何でしょうか?

+4

あなたの問題の解決策を見つけることができましたか?私は同じことで苦労しています。 – Marty

+0

related http://stackoverflow.com/questions/5119366/set-size-of-layered-drawable – mathheadinclouds

+1

「fill_vertical | clip_horizo​​ntal」はどうですか? –

答えて

-3

scaleType = "centerCrop"を使用すると、希望の結果が得られました。画像の端を切り取り、その中央の部分を切り取ります。

ImageViewのために

ImageViewのみを表示するようにソースとしてそれに設定されている画像のために働くscaleType属性を持っています。すなわち、それがTextViewの場合と同じように、Textはそのソースです。

scaleTypeは、実行時にXMLとしてソースとして提供されているイメージでのみ動作する背景として設定されたイメージでは機能しません。

背景画像を表示することができ、レイアウト

Layoutについてはが、には背景画像を処理し、属性の値ごとに、それを拡張することができ、レイアウトのために与えられた任意の属性はありません。

の施設には、Layoutがありませんので、施設に求める必要はありません。あなたの問題

1)異なる描画可能なフォルダにバックグラウンドヘッダーのための適切なイメージを保持し、それを使用し、あなたはすでにのためにイメージを開発したとして、それは、ランタイム拡張する必要はありません。このように

2異なるソリューションサイズは異なります。

2)あなたはちょうど私がバックグラウンドでそれを行う方法がわからないサンプル

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" 
     android:background="@drawable/subway" 
     android:scaleType="centerCrop" /> 

    <Button 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:layout_alignParentLeft="true" 
     /> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     /> 
</RelativeLayout> 
0

下回るように、あなたのXMLを再設計する必要があります。あなたは他のソリューションを試すことができます:

1)イメージの上に何かを表示する最も簡単な解決策は、それらが重なるようにいくつかのレイアウトに両方を置くことです。たとえば、ImageViewのディメンションでRelativeLayoutを使用し、両方のディメンションでImageViewがmatch_parentで、中央にTextViewを使用できます。

2)Imageviewを別のレイアウト(header.xmlなど)で保存して、(必要な場合はheader.xmlを含む)で使用できます。

3)ImageViewの上に表示されるレイアウトがどこでも同じ場合、ImageViewでカスタムレイアウトを作成し、TextViewを中央に配置し、そのレイアウトをどこでも使用できます。このカスタムレイアウトでTextView文字列を設定することができます。あなたはカスタムレイアウトについてもっと読むことができます、彼らは簡単です。コード内でビットマップに作物を中央に

2

は、次の操作を行います。

public static Bitmap cropCenter(Bitmap bmp) { 
    int dimension = Math.min(bmp.getWidth(), bmp.getHeight()); 
    return ThumbnailUtils.extractThumbnail(bmp, dimension, dimension); 
} 

私は賢明なビットマップXMLをcenterCropするために他の方法を知りません。

誰にでも役立つことを願っています。

私はこの記事から、この解決策が見つかりました:私は基本的な描画可能のアスペクト比を維持しデコレータでこの問題を解決し Android Crop Center of Bitmap

1

を:https://gist.github.com/rudchenkos/e33dc0d6669a61dde9d6548f6c3e0e7e

は残念ながら、からそれを適用する方法はありません

public class SplashActivity extends AppCompatActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     final Drawable bg = getResources().getDrawable(R.drawable.screen); 
     getWindow().setBackgroundDrawable(new CenterCropDrawable(bg)); 

     ... 
    } 
} 

android:windowBackgroundとして描画可能を指定するとほぼ同等であること:XMLので、私は私のスプラッシュ活動の先頭にあることを行いますアクティビティのテーマ

関連する問題