2016-10-24 9 views
-1

私はAspect Fill私のイメージにしたい。私の画像のサイズは1242x168です。私が望むのは、自分の画面が小さくても画像が切り取られ、左揃えになることですが、それはaspect fitのままです。ここでプログラムでアスペクトを塗りつぶす方法は? [Android]

は私のコードここ

DisplayMetrics displaymetrics = new DisplayMetrics(); 
      getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
      int device_width = displaymetrics.widthPixels; 

float density = getResources().getDisplayMetrics().density; 
      float dpWidth = displaymetrics.widthPixels/density; 

if(dpWidth >= 768) { 
       int aspectRatio = (int) (0.135 * device_width); 
       gifImageView.getLayoutParams().height = aspectRatio; 
       gifImageView.getLayoutParams().width = device_width; 
      } 

である私はandroid:scaleType="centerCrop"を使用してみましたが、それは私がなりたかった理由である右サイドをカットしたい中心部で作物である私のxml

<pl.droidsonroids.gif.GifImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/displayImage" 
    android:layout_gravity="left" 
    android:scaleType="fitStart" 
    android:background="@color/red" 
    android:adjustViewBounds="true" 
    /> 

です左揃え。

答えて

0

私はこの

//Get width of device 
    DisplayMetrics displaymetrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 

    float density = getResources().getDisplayMetrics().density; 
    float dpWidth = displaymetrics.widthPixels/density; 

    if(dpWidth > 768) { 
     int aspectRatio = (int) (0.135 * device_width); 
     gifImageView.getLayoutParams().height = aspectRatio; 
     gifImageView.getLayoutParams().width = device_width; 
     gifImageView.setIsScale(false); 
    }else{ 
     int aspectRatio = (int) (0.219 * device_width); 
     gifImageView.getLayoutParams().height = aspectRatio; 
     gifImageView.getLayoutParams().width = device_width; 
    gifImageView.setScaleType(ProportionalImageView.ScaleType.MATRIX); 
     gifImageView.setIsScale(true); 
    } 

そしてImageViewまで伸びcuztomizedクラスを作成をやってみましたが/ GifImageView

public class ProportionalImageView extends GifImageView { 

Boolean isScale = false; 

public ProportionalImageView(Context context) { 
    super(context); 
    if(isScale) { 
     setup(); 
    } 
} 

public ProportionalImageView(Context context, AttributeSet attrs) 
{ 
    super(context, attrs); 
    if(isScale) { 
     setup(); 
    } 
} 

public ProportionalImageView(Context context, AttributeSet attrs, int defStyle) 
{ 
    super(context, attrs, defStyle); 
    if(isScale) { 
     setup(); 
    } 
} 

private void setup() { 
    setScaleType(ScaleType.MATRIX); 
} 

@Override 
protected boolean setFrame(int l, int t, int r, int b) 
{ 
    if(isScale) { 
     computeMatrix(); 
    } 

    return super.setFrame(l, t, r, b); 
} 

@Override 
protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 
    super.onLayout(changed, left, top, right, bottom); 
    if(isScale) { 
     computeMatrix(); 
    } 
} 

private void computeMatrix() { 
    Matrix matrix = getImageMatrix(); 
    float scaleFactor, scaleFactorWidth, scaleFactorHeight; 
    scaleFactorWidth = (float) getWidth()/(float) getDrawable().getIntrinsicWidth(); 
    scaleFactorHeight = (float) getHeight()/(float) getDrawable().getIntrinsicHeight(); 

    if (scaleFactorHeight > scaleFactorWidth) { 
     scaleFactor = scaleFactorHeight; 
    } else { 
     scaleFactor = scaleFactorWidth; 
    } 

    matrix.setScale(scaleFactor, scaleFactor, 0, 0); 
    setImageMatrix(matrix); 
} 

public void setIsScale(Boolean isScale){ 
    this.isScale = isScale; 
} 

public Boolean getIsScale() { 
    return isScale; 
} 
} 
0

は、画面幅に基づいて画像をスケーリングしてみてください。

public static float getScreenWidth(Activity activity) { 
    Display display = activity.getWindowManager().getDefaultDisplay(); 
    DisplayMetrics outMetrics = new DisplayMetrics(); 
    display.getMetrics(outMetrics); 
    float pxWidth = outMetrics.widthPixels; 
    return pxWidth; 
} 

float screenWidth=getScreenWidth(act) 
float newHeight = screenWidth; 
if (bitmap.getWidth() != 0 && bitmap.getHeight() != 0) { 
newHeight = (screenWidth * bitmap.getHeight())/bitmap.getWidth(); 
} 

Bitmap scaledBitmap=Bitmap.createScaledBitmap(bitmap, (int) screenWidth, (int) newHeight, true); 

android:adjustViewBounds=true. 
android:scaleType="centerCrop" 

リンク:Resizing ImageView to fit to aspect ratiohttps://gist.github.com/JakeWharton/2856179

+0

画像をコンテナにフィットさせるのはまだ「アスペクトフィッティング」です(画像をカットしない)。 – natsumiyu

+0

ですが、 'centerCrop'を使って中央に切り抜きます。それを左揃えする方法はありますか? – natsumiyu

関連する問題