2016-08-08 5 views
-4

実行時にImageViewの最大高さを設定するにはどうすればよいですか?実行時にImageViewの最大高さを設定する方法

例えば、私はimage urlを持っていて、それは画面の幅より広い幅を持っています。次に、ImageView height as screen's widthを設定して、ImageViewを正方形にします。

私はこのための完璧な解決策を見つけることができません。どんな援助も深く感謝されます。あなたは次のカスタムクラスを使用することができスクエアImageViewのを作るために

+0

AFAICTを手動で行う必要があります。つまり、 'ImageView'にハードコードされた幅/高さを与えます。 – Sufian

+0

あなたのイメージビューを '不可視'にし、onResumeでイメージビューの幅と高さを 'visible'に設定します。それを行うには、別のスレッドを使用する必要があります。それが動作することを願っています。 –

+0

@Mamta Kaundalあなたのアプリケーションが起動されると、あなたのデバイスの幅が取得され、イメージビューで設定されます。他の賢い設定は、あなたのpiccassoライブラリのサイズと幅 –

答えて

0

public class SquareImageView extends ImageView { 

    public SquareImageView(Context context) { 
     super(context); 
    } 

    public SquareImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public SquareImageView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     //noinspection SuspiciousNameCombination 
     super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
    } 
} 
1

それは、画像の大きさ、完璧な比率との意志のサイズ以下のコードのために重要ではありません、それは最大幅を行いますあなたが最大の幅を望んでいない場合は、コードから次元を変更して、解決策suck.ifを作らずに。あなたはピカソが必要です。

private Dimensions getScreenDimensions() 
{ 
    DisplayMetrics metrics = new DisplayMetrics(); 
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    display.getMetrics(metrics); 
    final int widthScreen = metrics.widthPixels; 
    int heightScreen = metrics.heightPixels; 
    Dimensions screenDimen = new Dimensions(metrics.widthPixels,metrics.heightPixels); // custom class 
    return screenDimen; 
} 

    private Bitmap makeCalc(Dimensions screenDimen, Dimensions imageDimen,Bitmap bmp) 
{ 
    float widthRatio = screenDimen.getWidth()/imageDimen.getWidth(); 
    float scaledHeight = imageDimen.getHeight() * widthRatio; 
    imageBmp = Bitmap.createScaledBitmap(bmp, (int)screenDimen.getWidth(), (int) scaledHeight, true); 

    //image.setImageBitmap(resized); 
    return imageBmp; 
} 

public class Dimensions { 
float width; 
float height; 

public Dimensions(float width, float height) { 
    this.width = width; 
    this.height = height; 
} 

public float getHeight() { 
    return height; 
} 

public void setHeight(float height) { 
    this.height = height; 
} 

public float getWidth() { 
    return width; 
} 

public void setWidth(float width) { 
    this.width = width; 
} 
    } 

    Target target = new Target() { 
     @Override 
     public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
      int width = bitmap.getWidth(); // original width 
      int height = bitmap.getHeight(); // original heigh 
      Log.w(TAG, "onBitmapLoaded: " + width + " " + height); 

      Bitmap newBmp = makeCalc(getScreenDimensions(),new Dimensions(width,height),bitmap); 
      imageView.setImageBitmap(newBmp); 
     } 

     @Override 
     public void onBitmapFailed(Drawable errorDrawable) { 
      Log.w(TAG, "onBitmapFailed: "+errorDrawable); 
     } 

     @Override 
     public void onPrepareLoad(Drawable placeHolderDrawable) { 
      Log.w(TAG, "onPrepareLoad: "); 
     } 
    }; 

    Picasso.with(this).load(yourURL).into(target); 
    imageView.setTag(target); 
関連する問題