How set imageview scaletype to topCrop

前端 未结 3 496
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-06 01:23

I\'m coding android and I have a imageview. I want to set scaletype of this to topcrop. I could find centercrop in options, but it\'s not my request. How do I do?

相关标签:
3条回答
  • 2020-12-06 01:33

    I just wanted a temporary solution without excess work . Try this

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

    scrollY pulls your image up or down. Try it with different dp's and you 'll find the right size.

    0 讨论(0)
  • 2020-12-06 01:46

    I don't believe you need a custom Image View for this. All you have to do is set the scaleType to matrix and set a custom matrix to the ImageView.

    Refer: https://stackoverflow.com/a/38049348/4747587

    0 讨论(0)
  • 2020-12-06 01:48

    Custom Android ImageView for top-crop scaling of the contained drawable.

    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

    0 讨论(0)
提交回复
热议问题