FitWidth ImageView和TopCrop ImageView

FitWidth ImageView: 寬度自適應

[html]  view plain copy print ?
  1. <com.kk.drama.view.widget.FitWidthImageView  
  2.           android:id="@+id/show_images"  
  3.           android:layout_width="match_parent"  
  4.           android:layout_height="match_parent"  
  5.           android:src="@drawable/default_picture" />  



[java]  view plain copy print ?
  1. public class FitWidthImageView extends ImageView  
  2. {  
  3.      
  4.     public FitWidthImageView(Context context) {  
  5.         super(context);  
  6.         setup();  
  7.     }  
  8.      
  9.     public FitWidthImageView(Context context, AttributeSet attrs) {  
  10.         super(context, attrs);  
  11.         setup();  
  12.     }  
  13.      
  14.     public FitWidthImageView(Context context, AttributeSet attrs, int defStyle) {  
  15.         super(context, attrs, defStyle);  
  16.         setup();  
  17.     }  
  18.      
  19.     @Override  
  20.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  21.         int width = MeasureSpec.getSize(widthMeasureSpec);  
  22.         int height = width * getDrawable().getIntrinsicHeight() / getDrawable().getIntrinsicWidth();  
  23.         setMeasuredDimension(width, height);  
  24.     }  
  25.      
  26.     private void setup() {  
  27.         setScaleType(ScaleType.CENTER_CROP);  
  28.     }  
  29.   
  30. }  



TopCrop ImageView : 從頭部Crop而不是center

 
[html]  view plain copy print ?
  1. <com.kk.drama.view.widget.FitWidthImageView  
  2.             android:id="@+id/show_images"  
  3.             android:layout_width="match_parent"  
  4.             android:layout_height="227dp"  
  5.             android:src="@drawable/default_picture" />  

本身更名
[java]  view plain copy print ? 在CODE上查看代碼片 派生到個人代碼片
  1. public class FitWidthImageView extends ImageView  
  2. {  
  3.      
  4.     public FitWidthImageView(Context context) {  
  5.         super(context);  
  6.         setup();  
  7.     }  
  8.      
  9.     public FitWidthImageView(Context context, AttributeSet attrs) {  
  10.         super(context, attrs);  
  11.         setup();  
  12.     }  
  13.      
  14.     public FitWidthImageView(Context context, AttributeSet attrs, int defStyle) {  
  15.         super(context, attrs, defStyle);  
  16.         setup();  
  17.     }  
  18.      
  19.     private void setup() {  
  20.         setScaleType(ScaleType.CENTER_CROP);  
  21.         setScaleType(ScaleType.MATRIX);  
  22.     }  
  23.      
  24.     @Override  
  25.     protected boolean setFrame(int frameLeft, int frameTop, int frameRight, int frameBottom) {  
  26.         float frameWidth = frameRight - frameLeft;  
  27.         float frameHeight = frameBottom - frameTop;  
  28.          
  29.         float originalImageWidth = (float) getDrawable().getIntrinsicWidth();  
  30.         float originalImageHeight = (float) getDrawable().getIntrinsicHeight();  
  31.          
  32.         float usedScaleFactor = 1;  
  33.          
  34.         if ((frameWidth > originalImageWidth) || (frameHeight > originalImageHeight)) {  
  35.             // If frame is bigger than image  
  36.             // => Crop it, keep aspect ratio and position it at the bottom and center horizontally  
  37.              
  38.             float fitHorizontallyScaleFactor = frameWidth / originalImageWidth;  
  39.             float fitVerticallyScaleFactor = frameHeight / originalImageHeight;  
  40.              
  41.             usedScaleFactor = Math.max(fitHorizontallyScaleFactor, fitVerticallyScaleFactor);  
  42.         }  
  43.          
  44.         float newImageWidth = originalImageWidth * usedScaleFactor;  
  45.         float newImageHeight = originalImageHeight * usedScaleFactor;  
  46.          
  47.         Matrix matrix = getImageMatrix();  
  48.         matrix.setScale(usedScaleFactor, usedScaleFactor, 00); // Replaces the old matrix completly  
  49.         // matrix.postTranslate((frameWidth - newImageWidth) / 2, frameHeight - newImageHeight);//BottomCrop  
  50.         matrix.postTranslate((frameWidth - newImageWidth) / 20);//Top Crop  
  51.         setImageMatrix(matrix);  
  52.         return super.setFrame(frameLeft, frameTop, frameRight, frameBottom);  
  53.     }  
  54. }  
相關文章
相關標籤/搜索