需求就是让第一张的图片在拉申时跟随缩放效果。
一个可以滑动的自定义ScrollView控件,放大第一个子控件。还能监听它滑动时位置
不废话直接上效果图
- 这个中间放大的效果图:
直接上代码了:
- 自定义的ScrollView控件
/**
* 自定义的下拉放大scrollView,还具备监听滑动位置的功能
* 这个控件只是将它里面第一个控件放大
* 只需要将第一个放ImageView控件
*/
public class DropEnlargeScrollView extends ScrollView implements View.OnTouchListener {
// 记录首次按下位置
private float mFirstPosition = 0;
// 是否正在放大
private Boolean mScaling = false;
private View dropZoomView;
private int dropZoomViewWidth;
private int dropZoomViewHeight;
public DropEnlargeScrollView(Context context) {
super(context);
}
public DropEnlargeScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DropEnlargeScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
init();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
private void init() {
setOverScrollMode(OVER_SCROLL_NEVER);
if (getChildAt(0) != null) {
ViewGroup vg = (ViewGroup) getChildAt(0);
if (vg.getChildAt(0) != null) {
dropZoomView = vg.getChildAt(0);
setOnTouchListener(this);
}
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (dropZoomViewWidth <= 0 || dropZoomViewHeight <= 0) {
dropZoomViewWidth = dropZoomView.getMeasuredWidth();
dropZoomViewHeight = dropZoomView.getMeas