Android自定义ScrollView下拉图片变大且带有一键置顶功能

描述:下拉ScrollView时顶部的图片随之变大,回拉缩小,且带有一键置顶的功能

 

1.自定义类:

import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ScrollView;

import com.iruiyou.pet.R;

/**
 * Created by sgf
 * 图片下拉放大
 */
public class HeadZoomScrollView extends ScrollView implements View.OnClickListener {

    private ImageView goTopBtn;
    public HeadZoomScrollView(Context context) {
        super(context);
    }

    public HeadZoomScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public HeadZoomScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    public void setScrollListener(ImageView goTopBtn)
    {
        this.goTopBtn = goTopBtn;
        this.goTopBtn.setOnClickListener(this);
    }

    //    用于记录下拉位置
    private float y = 0f;
    //    zoomView原本的宽高
    private int zoomViewWidth = 0;
    private int zoomViewHeight = 0;

    //    是否正在放大
    private boolean mScaling = false;

    //    放大的view,默认为第一个子view
    private View zoomView;
    public void setZoomView(View zoomView) {
        this.zoomView = zoomView;
    }

    //    滑动放大系数,系数越大,滑动时放大程度越大
    private float mScaleRatio = 0.4f;
    public void setmScaleRatio(float mScaleRatio) {
        this.mScaleRatio = mScaleRatio;
    }

    //    最大的放大倍数
    private float mScaleTimes = 2f;
    public void setmScaleTimes(int mScaleTimes) {
        this.mScaleTimes = mScaleTimes;
    }

    //    回弹时间系数,系数越小,回弹越快
    private float mReplyRatio = 0.5f;
    public void setmReplyRatio(float mReplyRatio) {
        this.mReplyRatio = mReplyRatio;
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
//        不可过度滚动,否则上移后下拉会出现部分空白的情况
        setOverScrollMode(OVER_SCROLL_NEVER);
//        获得默认第一个view
        if (getChildAt(0) != null && getChildAt(0) instanceof ViewGroup && zoomView == null) {
            ViewGroup vg = (ViewGroup) getChildAt(0);
            if (vg.getChildCount() > 0) {
                zoomView = vg.getChildAt(0);
            }
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if (zoomViewWidth <= 0 || zoomViewHeight <=0) {
            zoomViewWidth = zoomView.getMeasuredWidth();
            zoomViewHeight = zoomView.getMeasuredHeight();
        }
        if (zoomView == null || zoomViewWidth <= 0 || zoomViewHeight <= 0) {
            return super.onTouchEvent(ev);
        }
        switch (ev.getAction()) {
            case MotionEvent.ACTION_MOVE:
                if (!mScaling) {
                    if (getScrollY() == 0) {
                        y = ev.getY();//滑动到顶部时,记录位置
                    } else {
                        break;
                    }
                }
                int distance = (int) ((ev.getY() - y)*mScaleRatio);
                if (distance < 0) break;//若往下滑动
                mScaling = true;
                setZoom(distance);
                return true;
            case MotionEvent.ACTION_UP:
                mScaling = false;
                replyView();
                break;
        }
        return super.onTouchEvent(ev);
    }

    /**放大view*/
    private void setZoom(float s) {
        float scaleTimes = (float) ((zoomViewWidth+s)/(zoomViewWidth*1.0));
//        如超过最大放大倍数,直接返回
        if (scaleTimes > mScaleTimes) return;

        ViewGroup.LayoutParams layoutParams = zoomView.getLayoutParams();
        layoutParams.width = (int) (zoomViewWidth + s);
        layoutParams.height = (int)(zoomViewHeight*((zoomViewWidth+s)/zoomViewWidth));
//        设置控件水平居中
        ((MarginLayoutParams) layoutParams).setMargins(-(layoutParams.width - zoomViewWidth) / 2, 0, 0, 0);
        zoomView.setLayoutParams(layoutParams);
    }

    /**回弹*/
    private void replyView() {
        final float distance = zoomView.getMeasuredWidth() - zoomViewWidth;
        // 设置动画
        ValueAnimator anim = ObjectAnimator.ofFloat(distance, 0.0F).setDuration((long) (distance * mReplyRatio));
        anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                setZoom((Float) animation.getAnimatedValue());
            }
        });
        anim.start();
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (onScrollListener!=null) onScrollListener.onScroll(l,t,oldl,oldt);
        /**
         * 滑动距离超过500px,出现向上按钮,可以做为自定义属性
         */
        if (t >= 500)
        {
            goTopBtn.setVisibility(View.VISIBLE);
        }
        else
        {
            goTopBtn.setVisibility(View.GONE);
        }
    }

    private OnScrollListener onScrollListener;
    public void setOnScrollListener(OnScrollListener onScrollListener) {
        this.onScrollListener = onScrollListener;
    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.im_top_course)
        {
            this.smoothScrollTo(0, 0);
        }
    }

    /**滑动监听*/
    public  interface OnScrollListener{
        void onScroll(int scrollX, int scrollY, int oldScrollX, int oldScrollY);
    }


}

2.布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/_f1f1f1"
    android:orientation="vertical">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="42dp"
        android:orientation="vertical">

        <!--<android.support.v4.widget.NestedScrollView-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="match_parent">-->
        <com.iruiyou.pet.utils.HeadZoomScrollView
            android:id="@+id/headzom_ScrollView"
            android:layout_width="match_parent"
            android:orientation="vertical"
            android:fillViewport="true"
            android:layout_height="match_parent">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
                <!--标题-->
                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="206dp"
                    android:layout_alignParentBottom="true">

                    <ImageView
                        android:id="@+id/im_course_bg"
                        android:layout_width="match_parent"
                        android:src="@drawable/background2"
                        android:scaleType="fitXY"
                        android:layout_height="match_parent" />

                    <!--<TextView-->
                        <!--android:id="@+id/tv_course_save"-->
                        <!--android:layout_width="wrap_content"-->
                        <!--android:layout_height="wrap_content"-->
                        <!--android:layout_marginTop="9dp"-->
                        <!--android:layout_marginRight="10dp"-->
                        <!--android:textColor="@color/white"-->
                        <!--android:textSize="13sp"-->
                        <!--android:layout_alignParentRight="true"-->
                        <!--android:text="保存" />-->
                    <!--<TextView-->
                        <!--android:id="@+id/tv_course_title"-->
                        <!--android:layout_width="wrap_content"-->
                        <!--android:layout_height="wrap_content"-->
                        <!--android:layout_alignParentTop="true"-->
                        <!--android:layout_centerHorizontal="true"-->
                        <!--android:textColor="@color/white"-->
                        <!--android:textSize="15sp"-->
                        <!--android:layout_marginTop="9dp"-->
                        <!--android:text="KING" />-->
                    <!--左侧返回-->
                    <LinearLayout
                        android:id="@+id/ll_title_course_back"
                        android:layout_width="40dp"
                        android:layout_height="40dp"
                        android:layout_alignParentLeft="true"
                        android:layout_alignParentTop="true"
                        android:layout_marginLeft="10dp"
                        android:layout_marginTop="9dp"
                        android:orientation="horizontal">

                        <RelativeLayout
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:background="@android:color/transparent">

                            <ImageView
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_centerInParent="true"
                                android:background="@drawable/course_back" />
                        </RelativeLayout>
                    </LinearLayout>
                </RelativeLayout>
                <!--课程资料-->
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@color/white"
                    android:orientation="vertical"
                    android:visibility="visible">
                    <TextView
                        android:id="@+id/tv_course_titles"
                        android:layout_width="match_parent"
                        android:textColor="@color/_333333"
                        android:layout_marginRight="22dp"
                        android:layout_marginLeft="22dp"
                        android:layout_marginTop="11dp"
                        android:layout_marginBottom="11dp"
                        android:textSize="14sp"
                        android:text="KING"
                        android:layout_height="wrap_content" />
                    <!--课程资料-->
                    <LinearLayout
                        android:id="@+id/ll_my_information"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_gravity="center"

                        android:layout_marginBottom="11dp"
                        android:layout_marginLeft="22dp"
                        android:layout_marginRight="22dp"
                        android:orientation="horizontal">

                        <ImageView
                            android:id="@+id/im_course_head"
                            android:layout_width="29dp"
                            android:layout_height="29dp"
                            android:layout_gravity="center"
                            android:src="@drawable/head_home" />

                        <LinearLayout
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center"
                            android:layout_marginLeft="11dp"
                            android:orientation="vertical">

                            <TextView
                                android:id="@+id/tv_course_name"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:maxLines="1"
                                android:text="KING"
                                android:textColor="@color/_333333"
                                android:textSize="10sp" />

                            <TextView
                                android:id="@+id/tv_course_information"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_marginTop="5dp"
                                android:maxLines="1"
                                android:text="KING"
                                android:textColor="@color/_999999"
                                android:textSize="9sp" />
                        </LinearLayout>
                    </LinearLayout>
                </LinearLayout>
                <include layout="@layout/line5"></include>

                <!--课程说明-->
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    android:background="@color/white"
                    android:gravity="center_vertical"
                    android:orientation="horizontal">

                    <View
                        android:layout_width="3dp"
                        android:layout_height="14dp"
                        android:layout_marginLeft="22dp"
                        android:background="@color/_26c68a"></View>

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="11dp"
                        android:layout_weight="1"
                        android:layout_marginRight="22dp"
                        android:text="@string/course_description"
                        android:textColor="@color/_666666"
                        android:textSize="11sp" />

                    <!--<LinearLayout-->
                        <!--android:layout_width="40dp"-->
                        <!--android:layout_height="40dp"-->
                        <!--android:gravity="center">-->

                        <!--<ImageView-->
                            <!--android:layout_width="wrap_content"-->
                            <!--android:layout_height="wrap_content"-->
                            <!--android:layout_marginRight="5dp"-->
                            <!--android:background="@drawable/find_in"-->
                            <!--android:textColor="@color/_999999"-->
                            <!--android:textSize="10dp" />-->
                    <!--</LinearLayout>-->
                </LinearLayout>
               <LinearLayout
                   android:layout_width="match_parent"
                   android:orientation="vertical"
                   android:background="@color/white"
                   android:layout_height="wrap_content">
                   <TextView
                       android:id="@+id/tv_course_explain"
                       android:layout_width="wrap_content"
                       android:layout_height="wrap_content"
                       android:layout_marginTop="14dp"
                       android:layout_marginBottom="10dp"
                       android:layout_marginLeft="22dp"
                       android:layout_marginRight="22dp"
                       android:text="KING"
                       android:visibility="gone"
                       android:textColor="@color/_666666"
                       android:textSize="12sp" />

                   <com.iruiyou.pet.utils.MaxRecyclerView
                       android:id="@+id/course_RecyclerView"
                       android:layout_width="match_parent"
                       android:layout_height="wrap_content"

                       android:background="@color/white" />
                   <!--<ImageView-->
                       <!--android:id="@+id/im_course_screenshot"-->
                       <!--android:layout_width="match_parent"-->
                       <!--android:layout_marginRight="22dp"-->
                       <!--android:layout_marginLeft="22dp"-->
                       <!--android:src="@drawable/background2"-->
                       <!--android:layout_height="134dp" />-->

                   <TextView
                       android:id="@+id/tv_course_introduce"
                       android:layout_width="wrap_content"
                       android:layout_height="wrap_content"
                       android:layout_marginTop="21dp"
                       android:layout_marginBottom="10dp"
                       android:layout_marginLeft="22dp"
                       android:layout_marginRight="22dp"
                       android:visibility="gone"
                       android:text="KING"
                       android:textColor="@color/_666666"
                       android:textSize="12sp" />
                   <include layout="@layout/line1"></include>

                   <LinearLayout
                       android:layout_width="match_parent"
                       android:orientation="horizontal"
                       android:gravity="center"
                       android:layout_height="wrap_content">
                       <ImageView
                           android:layout_width="wrap_content"
                           android:src="@drawable/warning"
                           android:layout_marginTop="10dp"
                           android:layout_marginBottom="10dp"
                           android:layout_height="wrap_content" />
                       <TextView
                           android:id="@+id/tv_course_Tips"
                           android:layout_width="wrap_content"
                           android:layout_height="wrap_content"
                           android:layout_marginTop="10dp"
                           android:layout_marginBottom="10dp"
                           android:layout_marginLeft="6dp"
                           android:textColor="@color/_333333"
                           android:textSize="12sp" />
                   </LinearLayout>
                   <include layout="@layout/line5"></include>
               </LinearLayout>
            </LinearLayout>
        </com.iruiyou.pet.utils.HeadZoomScrollView>
        <!--</android.support.v4.widget.NestedScrollView>-->
    </LinearLayout>
    <include
        android:id="@+id/include_foot_course"
        layout="@layout/include_foot_course"
        android:layout_width="match_parent"
        android:layout_height="42dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
    <ImageView
        android:id="@+id/im_top_course"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:visibility="gone"
        android:src="@drawable/im_top"
        android:layout_marginBottom="58dp"
        android:layout_marginRight="25dp"/>
</RelativeLayout>

3.代码设置:

 headzom_ScrollView.smoothScrollTo(0, 0);//默认置顶
        headzom_ScrollView.setScrollListener(im_top_course);//设置一键置顶图标

4.其他自定义类(可以试试):

a.

import android.animation.ObjectAnimator;
import android.content.Context;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.ScrollView;

/**
 * 图片下拉放大
 */
public class PullToZoomScrollView extends ScrollView{
    private  boolean isonce;//加载该View的布局时是否是第一次加载,是第一次就让其实现OnMeasure里的代码

    private LinearLayout mParentView;//布局的父布局,ScrollView内部只能有一个根ViewGroup,就是此View
    private ViewGroup mTopView;//这个是带背景的上半部分的View,下半部分的View用不到的

    private int mScreenHeight;//整个手机屏幕的高度,这是为了初始化该View时设置mTopView用的
    private int mTopViewHeight;//这个就是mTopView的高度

    private int mCurrentOffset=0;//当前右侧滚条顶点的偏移量。ScrollView右侧是有滚动条的,当下拉时,
    //滚动条向上滑,当向下滑动时,滚动条向下滑动。

    private ObjectAnimator oa;//这个是对象动画,这个在本View里很简单,也很独立,就在这里申明一下,后面有两个方法
    //两个方法是:setT(int t),reset()两个方法用到,其他都和它无关了。

    /**
     * 初始化获取高度值,并记录
     * @param context
     * @param attrs
     */
    public PullToZoomScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.setOverScrollMode(View.OVER_SCROLL_NEVER);
        WindowManager wm= (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics metrics=new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(metrics);
        mScreenHeight=metrics.heightPixels;
        mTopViewHeight=mScreenHeight/2-(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 90, context.getResources().getDisplayMetrics());

    }

    /**
     * 将记录的值设置到控件上,并只让控件设置一次
     * @param widthMeasureSpec
     * @param heightMeasureSpec
     */
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        if(!isonce) {
            mParentView = (LinearLayout) this.getChildAt(0);
            mTopView = (ViewGroup) mParentView.getChildAt(0);
            mTopView.getLayoutParams().height = mTopViewHeight;
            isonce=true;
        }
    }

    private float startY=0;//向下拉动要放大,手指向下滑时,点击的第一个点的Y坐标
    private boolean isBig;//是否正在向下拉放大上半部分View
    private boolean isTouchOne;//是否是一次连续的MOVE,默认为false,
    //在MoVe时,如果发现滑动标签位移量为0,则获取此时的Y坐标,作为起始坐标,然后置为true,为了在连续的Move中只获取一次起始坐标
    //当Up弹起时,一次触摸移动完成,将isTouchOne置为false
    private float distance=0;//向下滑动到释放的高度差
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        int action =ev.getAction();
        switch (action){
            case MotionEvent.ACTION_DOWN:
                break;
            case MotionEvent.ACTION_MOVE:
                if(mCurrentOffset<=0){
                    if(!isTouchOne){
                        startY=ev.getY();
                        isTouchOne=true;
                    }
                    distance=ev.getY()-startY;
                    if(distance>0){
                        isBig=true;
                        setT((int)-distance/4);
                    }
                }
                break;
            case MotionEvent.ACTION_UP:
                if(isBig) {
                    reset();
                    isBig=false;
                }
                isTouchOne=false;
            break;
        }
        return super.onTouchEvent(ev);
    }

    /**
     * 对象动画要有的设置方法
     * @param t
     */
    public void setT(int t) {
        scrollTo(0, 0);
        if (t < 0) {
            mTopView.getLayoutParams().height = mTopViewHeight-t;
            mTopView.requestLayout();
        }
    }

    /**
     * 主要用于释放手指后的回弹效果
     */
    private void reset() {
        if (oa != null && oa.isRunning()) {
            return;
        }
        oa = ObjectAnimator.ofInt(this, "t", (int)-distance / 4, 0);
        oa.setDuration(150);
        oa.start();
    }

    /**
     * 这个是设置向上滑动时,上半部分View滑动速度让其小于下半部分
     * @param l
     * @param t
     * @param oldl
     * @param oldt
     */
    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        mCurrentOffset = t;//右边滑动标签相对于顶端的偏移量
        //当手势上滑,则右侧滚动条下滑,下滑的高度小于TopView的高度,则让TopView的上滑速度小于DownView的上滑速度
        //DownView的上滑速度是滚动条的速度,也就是滚动的距离是右侧滚动条的距离
        //则TopView的速度要小,只需要将右侧滚动条的偏移量也就是t缩小一定倍数就行了。我这里除以2速度减小1倍
        if (t <= mTopViewHeight&&t>=0&&!isBig) {
            mTopView.setTranslationY(t / 2);//使得TopView滑动的速度小于滚轮滚动的速度
        }
        if(isBig){
            scrollTo(0,0);
        }

    }
}

b.

import android.animation.ValueAnimator;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ScrollView;
 
/**
 * 图片下拉放大,松手回弹
 */
 
public class HeadZoomScrollView extends ScrollView {
    private View mZoomView;
    private int mZoomViewWidth;
    private int mZoomViewHeight;
 
    private float firstPosition;//记录第一次按下的位置
    private boolean isScrolling;//是否正在缩放
    private float mScrollRate = 0.3f;//缩放系数,缩放系数越大,变化的越大
    private float mReplyRate = 0.5f;//回调系数,越大,回调越慢
 
    public HeadZoomScrollView(Context context) {
        super(context);
    }
 
    public HeadZoomScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    public HeadZoomScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
 
    public void setmZoomView(View mZoomView) {
        this.mZoomView = mZoomView;
    }
 
    public void setmScrollRate(float mScrollRate) {
        this.mScrollRate = mScrollRate;
    }
 
    public void setmReplyRate(float mReplyRate) {
        this.mReplyRate = mReplyRate;
    }
 
    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        init();
    }
 
    private void init() {
        setOverScrollMode(OVER_SCROLL_NEVER);
        if (getChildAt(0) != null) {
            ViewGroup vg = (ViewGroup) getChildAt(0);
            if (vg.getChildAt(0) != null) {
                mZoomView = vg.getChildAt(0);
            }
        }
    }
 
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if (mZoomViewWidth <= 0 || mZoomViewHeight <= 0) {
            mZoomViewWidth = mZoomView.getMeasuredWidth();
            mZoomViewHeight = mZoomView.getMeasuredHeight();
        }
        switch (ev.getAction()) {
            case MotionEvent.ACTION_UP:
                //手指离开后恢复图片
                isScrolling = false;
                replyImage();
                break;
            case MotionEvent.ACTION_MOVE:
                if (!isScrolling) {
                    if (getScrollY() == 0) {
                        firstPosition = ev.getY();// 滚动到顶部时记录位置,否则正常返回
                    } else {
                        break;
                    }
                }
                int distance = (int) ((ev.getY() - firstPosition) * mScrollRate); // 滚动距离乘以一个系数
                if (distance < 0) { // 当前位置比记录位置要小,正常返回
                    break;
                }
                // 处理放大
                isScrolling = true;
                setZoom(distance);
                return true; // 返回true表示已经完成触摸事件,不再处理
        }
        return true;
    }
    //回弹动画
    private void replyImage() {
        float distance = mZoomView.getMeasuredWidth() - mZoomViewWidth;
        ValueAnimator valueAnimator = ValueAnimator.ofFloat(distance, 0f).setDuration((long) (distance * mReplyRate));
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                setZoom((Float) animation.getAnimatedValue());
            }
        });
        valueAnimator.start();
    }
    public void setZoom(float zoom) {
        if (mZoomViewWidth <= 0 || mZoomViewHeight <= 0) {
            return;
        }
        ViewGroup.LayoutParams lp = mZoomView.getLayoutParams();
        lp.width = (int) (mZoomViewWidth + zoom);
        lp.height = (int) (mZoomViewHeight * ((mZoomViewWidth + zoom) / mZoomViewWidth));
        ((MarginLayoutParams) lp).setMargins(-(lp.width - mZoomViewWidth) / 2, 0, 0, 0);
        mZoomView.setLayoutParams(lp);
    }
}

可以参考:一键置顶的ScrollView        案例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值