2016-08-12 11 views
0

私はこのXMLファイルにRelativeLayoutを持っています。このRelativeLayoutでは、多くのビューを持つImageViewとLinearLayoutを持っています(コードには表示されません)。ImageViewの幅をどのように変更して比率を修正しますか?

<RelativeLayout 
     android:layout_weight="1" 

     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 

      android:id="@+id/imageViewDemo"/> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 

      android:layout_alignTop="@+id/imageViewDemo" 
      android:layout_alignLeft="@+id/imageViewDemo" 
      android:layout_alignRight="@+id/imageViewDemo" 
      android:layout_alignBottom="@+id/imageViewDemo" 
      android:gravity="center" 

      android:orientation="vertical"> 

      <!-- A lot of stuff --> 

     </LinearLayout> 
    </RelativeLayout> 

ImageViewには、電話機/タブレットの画面サイズの比率と同じ幅/高さの比率が必要です。高さは親ビューに一致するはずですが、幅は正しい比率に一致するように変更する必要があります。 LinearLayoutはImageView内になければなりません。私は単に実用的な解決策を見つけることができません。誰かが私を助けることができますか?ありがとう!

+0

あなたの問題は解決されますhttp://stackoverflow.com/a/38864774/5305430 – sushildlh

+0

あなたはandroid:scaleType = "fitCenter"を試しましたか? – Neil

答えて

1

ImageViewは、電話機/タブレットの画面サイズの比率と同じ幅/高さの比率を設定します。

最初に、幅/高さの比率を計算するために電話機/タブレットの画面サイズを取得する必要があります。

このコードは、比率を得る:

DisplayMetrics metrics = new DisplayMetrics(); 
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); 
int width = metrics.widthPixels; 
int height = metrics.heightPixels; 
final float screenRatio = ((float)width/(float)height); 

高さがちょうど親ビューと一致している必要がありますが、幅は正しい比率に合わせて変更する必要があります。この目的のために

、あなたはコードでImageViewの幅を変更する必要があり、高さはあなたのレイアウトでmatch_parentを指定する必要があります。これはあなたを助けることができる

imageView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     imageView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 

     int height = imageView.getHeight(); 
     int resultWidth = (int)(height * screenRatio); 

     ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams(); 
     layoutParams.width = resultWidth; 
     imageView.setLayoutParams(layoutParams); 
    } 
}); 

希望:

このコードを使用すると、幅を変更することができます。

+0

ありがとう!私は小さなものを一つ変えなければならなかった。 'float screenRatio =(float)(幅/高さ);'私はそれを 'final float screenRatio =((float)width /(float)height);に変更しました。 – tomhogenkamp

+0

このような間違いをして申し訳ありませんが、私は私の答えを変更します。あなたを助けることはとても嬉しいです。 :) –

関連する問題