2016-08-31 2 views
0

タッチ・イメージ・ビューを線形レイアウトにプログラムで挿入しています。通常のイメージ・ビューを使用している場合は、向きが変わるとイメージ調整自体になります。しかし、タッチ・イメージ・ビューを使用したとき、イメージは非常に小さくなります。私が実装しようとしているコード: -TouchImageViewを使用して線形レイアウトに合わせてプログラムでイメージの幅を調整する方法はありますか?

TouchImageView imageView = new TouchImageView(this); 
      LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
      layoutParams.setMargins(16,16,16,16); 
      imageView.setLayoutParams(layoutParams); 
      imageView.setMaxZoom(4f); 
      web_linearLayout.addView(imageView); 

      imageView.setAdjustViewBounds(true); 
      imageView.setScaleType(TouchImageView.ScaleType.FIT_CENTER); 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
       imageView.setCropToPadding(false); 
      } 

      imageView.setImageURI(Uri.fromFile(new File("/sdcard/reckoner_images/" + fileName))); 

すべてのヘルプや提案がappreciated.Thankあなたです。

+0

これはアスペクト比を維持しているからです。 inputType:fitXYをxmlに入れてみてください。 – Nidhi

+0

@Nidhiの編集に感謝します。私はこのimageView.setScaleType(ImageView.ScaleType.FIT_XY)を試しました。しかしそれはうまくいかなかった。 – AndroidNewBee

+0

このプロパティはなぜ設定されていますか? imageView.setMaxZoom(4f); – Stallion

答えて

0

setImageURIメソッドを呼び出してイメージをロードすると、イメージはデバイスの密度に応じてスケーリングされます。ステートメントimageView.setAdjustViewBounds(true);は、WRAP_CONTENTでLayoutParamsを設定すると、元の寸法がImageViewになります(ImageViewの 'onMeasure'メソッドのソースを読むことができます)。しかし、TouchImageViewは、onMeasureメソッドをオーバーライドして、余分な機能を実装すると、setAdjustViewBoundsが役に立たなくなります(また、onMeasureのソースをTouchImageViewに読み込むこともできます)。したがって、TouchImageViewの寸法は自動スケールできません。次のようにすることができます。

setImageURIの代わりにsetImageBitmapを使用すると、イメージを読み込んでスケーリングを自分で処理できます。

//imageView.setImageURI(Uri.fromFile(new File("/sdcard/reckoner_images/" + fileName))); 
    Bitmap bm = BitmapFactory.decodeFile("/sdcard/reckoner_images/" + fileName); 
    imageView.setImageBitmap(bm); 

それともTouchImageView

LinearLayout.LayoutParams layoutParams = 
      new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); 

のLayoutParamsでMATCH_PARENTの代わりWRAP_CONTENTを使用し、私は有用である、自分でそれをテストしています。あなたの問題を解決できることを願っています:)