AutoRatioImageview.java
1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.megvii.idcardlib.view;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;
/**
* Created by binghezhouke on 14-1-2.
*/
public class AutoRatioImageview extends ImageView {
private float mRatio = -1;
private int mPrefer = 0;
public AutoRatioImageview(Context context) {
super(context);
}
public AutoRatioImageview(Context context, AttributeSet attrs) {
super(context, attrs);
}
public AutoRatioImageview(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int viewWidth = MeasureSpec.getSize(widthMeasureSpec);
int viewHeight = MeasureSpec.getSize(heightMeasureSpec);
if (mRatio < 0) {
//this case means the ration is auto ratio
if (getDrawable() == null) {
//no image settled, invoke super onMeasure
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
} else {
int drawableWidth = getDrawable().getIntrinsicWidth();
int drawableHeight = getDrawable().getIntrinsicHeight();
if (mPrefer == 0) {
// consider width
setMeasuredDimension(viewWidth,
viewWidth * drawableHeight / drawableWidth);
} else {
setMeasuredDimension(viewHeight * drawableWidth / drawableHeight, viewHeight);
}
}
} else {
// this view is fixed ratio
if (mPrefer == 0) {
// consider view width
setMeasuredDimension(viewWidth,
(int) (viewWidth * mRatio));
} else {
setMeasuredDimension((int) (viewHeight / mRatio), viewWidth);
}
}
}
}