FitWidth ImageView和TopCrop ImageView

来源:互联网 发布:网易大数据平台 编辑:程序博客网 时间:2024/06/11 16:22
FitWidth ImageView: 宽度自适应

  <com.kk.drama.view.widget.FitWidthImageView            android:id="@+id/show_images"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:src="@drawable/default_picture" />



public class FitWidthImageView extends ImageView{       public FitWidthImageView(Context context) {        super(context);        setup();    }       public FitWidthImageView(Context context, AttributeSet attrs) {        super(context, attrs);        setup();    }       public FitWidthImageView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        setup();    }       @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int width = MeasureSpec.getSize(widthMeasureSpec);        int height = width * getDrawable().getIntrinsicHeight() / getDrawable().getIntrinsicWidth();        setMeasuredDimension(width, height);    }       private void setup() {        setScaleType(ScaleType.CENTER_CROP);    }}



TopCrop ImageView : 从头部Crop而不是center

 
<com.kk.drama.view.widget.FitWidthImageView            android:id="@+id/show_images"            android:layout_width="match_parent"            android:layout_height="227dp"            android:src="@drawable/default_picture" />

自己改名
public class FitWidthImageView extends ImageView{       public FitWidthImageView(Context context) {        super(context);        setup();    }       public FitWidthImageView(Context context, AttributeSet attrs) {        super(context, attrs);        setup();    }       public FitWidthImageView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        setup();    }       private void setup() {        setScaleType(ScaleType.CENTER_CROP);        setScaleType(ScaleType.MATRIX);    }       @Override    protected boolean setFrame(int frameLeft, int frameTop, int frameRight, int frameBottom) {        float frameWidth = frameRight - frameLeft;        float frameHeight = frameBottom - frameTop;               float originalImageWidth = (float) getDrawable().getIntrinsicWidth();        float originalImageHeight = (float) getDrawable().getIntrinsicHeight();               float usedScaleFactor = 1;               if ((frameWidth > originalImageWidth) || (frameHeight > originalImageHeight)) {            // If frame is bigger than image            // => Crop it, keep aspect ratio and position it at the bottom and center horizontally                       float fitHorizontallyScaleFactor = frameWidth / originalImageWidth;            float fitVerticallyScaleFactor = frameHeight / originalImageHeight;                       usedScaleFactor = Math.max(fitHorizontallyScaleFactor, fitVerticallyScaleFactor);        }               float newImageWidth = originalImageWidth * usedScaleFactor;        float newImageHeight = originalImageHeight * usedScaleFactor;               Matrix matrix = getImageMatrix();        matrix.setScale(usedScaleFactor, usedScaleFactor, 0, 0); // Replaces the old matrix completly        // matrix.postTranslate((frameWidth - newImageWidth) / 2, frameHeight - newImageHeight);//BottomCrop        matrix.postTranslate((frameWidth - newImageWidth) / 2, 0);//Top Crop        setImageMatrix(matrix);        return super.setFrame(frameLeft, frameTop, frameRight, frameBottom);    }}


0 0
原创粉丝点击