web-dev-qa-db-ja.com

imageviewscaletypeをtopCropに設定する方法

Androidをコーディングしていて、imageviewがあります。これのscaletypeをtopcropに設定したいと思います。オプションでcentercropを見つけることができましたが、それは私の要求ではありません。どうすればよいですか?

14
Javad Abedi

カスタムAndroid含まれているドローアブルのトップクロップスケーリング用のImageView。

import Android.content.Context;
import Android.graphics.Matrix;
import Android.widget.ImageView;

/**
* ImageView to display top-crop scale of an image view.
*
* @author Chris Arriola
*/
public class TopCropImageView extends ImageView {

public TopCropImageView(Context context) {
    super(context);
    setScaleType(ScaleType.MATRIX);
}

@Override
protected boolean setFrame(int l, int t, int r, int b) {
    final Matrix matrix = getImageMatrix();

    float scale;
    final int viewWidth = getWidth() - getPaddingLeft() - getPaddingRight();
    final int viewHeight = getHeight() - getPaddingTop() - getPaddingBottom();
    final int drawableWidth = getDrawable().getIntrinsicWidth();
    final int drawableHeight = getDrawable().getIntrinsicHeight();

    if (drawableWidth * viewHeight > drawableHeight * viewWidth) {
        scale = (float) viewHeight / (float) drawableHeight;
    } else {
        scale = (float) viewWidth / (float) drawableWidth;
    }

    matrix.setScale(scale, scale);
    setImageMatrix(matrix);

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

https://Gist.github.com/arriolac/3843346

22
Jay

余分な作業をせずに一時的な解決策が欲しかっただけです。これを試して

<ImageView
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:scaleType="centerCrop"
    Android:scrollY="-100dp"
    Android:id="@+id/poster"
   />

scrollYは、画像を上下にプルします。さまざまなdpで試してみると、適切なサイズが見つかります。

11
rahulxyz

このためにカスタム画像ビューが必要だとは思いません。 scaleTypematrixに設定し、カスタムマトリックスをImageViewに設定するだけです。

参照: https://stackoverflow.com/a/38049348/4747587

4
Henry