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);
- }
- }