本文实例为大家分享了AndroID实现下拉放大图片松手自动反d的具体代码,供大家参考,具体内容如下
直接看效果:
下面就是代码
headZoomScrollVIEw类
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; /** * Created by BAIPEI on 2017/11/21. */ 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; } //回d动画 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); mZoomVIEw.setLayoutParams(lp); } }
MainActivity里面没有写代码就不粘了
下面是布局activity_main
<bwIE.com.pullListvIEw.headZoomScrollVIEw xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:ID="@+ID/scrollVIEw" androID:layout_wIDth="match_parent" androID:layout_height="match_parent"> <linearLayout androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:orIEntation="vertical"> <ImageVIEw androID:ID="@+ID/iv_show" androID:layout_wIDth="match_parent" androID:layout_height="200dp" androID:layout_weight="1" androID:src="@drawable/a1"/> <TextVIEw androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:text="数据1"/> <TextVIEw androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:text="数据2"/> <TextVIEw androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:text="数据3"/> <TextVIEw androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:text="数据4"/> </linearLayout> </bwIE.com.pullListvIEw.headZoomScrollVIEw>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
您可能感兴趣的文章:Android ListView实现下拉顶部图片变大效果Android仿QQ好友详情页下拉顶部图片缩放效果Android DragImageView实现下拉拖动图片放大效果android ScrollView实现下拉放大头部图片Android自定义scrollView实现顶部图片下拉放大Android开发重写Animation实现下拉图片后d射回去效果示例 总结以上是内存溢出为你收集整理的Android实现下拉放大图片松手自动反d效果全部内容,希望文章能够帮你解决Android实现下拉放大图片松手自动反d效果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)