大佬教程收集整理的这篇文章主要介绍了Android自定义ScrollView实现放大回弹效果实例代码,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_0@
@H_301_0@2,那下面我们就来实现一下,首先看一下布局,由于一般只是我们包含头像的那部分方法,所以这里我们要把布局分成两部分,对应的布局文件效果图如下:@H_301_0@
@H_301_0@ @H_301_0@第一步:创建一个类,继承自ScrollView,重写相应的构造函数
public class ZoomInScrollView extends ScrollView { public ZoomInScrollView(Context context) { this(context,null); } public ZoomInScrollView(Context context,AttributeSet attrs) { this(context,attrs,0); } public ZoomInScrollView(Context context,AttributeSet attrs,int defStyleAttr) { super(context,defStyleAttr); } }
@Override protected void onFinishInflate() { super.onFinishInflate(); //设置不可过度滚动,否则上移后下拉会出现部分空白的情况 setOverScrollmode(OVER_SCROLL_NEVER); View child = getChildAt(0); if (child != null && child instanceof ViewGroup) { //获取默认第一个子View mHeaderView = ((ViewGroup) child).getChildAt(0); } }
@Override public Boolean onTouchEvent(MotionEvent ev) { if (mHeaderView == null) return super.onTouchEvent(ev); switch (ev.getAction()) { case MotionEvent.ACTION_MOVE: if (!mIsPulling) { //第一次下拉 if (getScrollY() == 0) { //在顶部的时候,记录顶部位置 mLastY = (int) ev.getY(); } else { break; } } if (ev.getY() - mLastY < 0) return super.onTouchEvent(ev); int distance = (int) ((ev.getY() - mLastY) * mScaleRatio); mIsPulling = true; setZoom(distancE); return true; case MotionEvent.ACTION_UP: mIsPulling = false; replyView(); break; } return super.onTouchEvent(ev); }
/** ** 放大view */ private void setZoom(float s) { float scaleTimes = (float) ((mHeaderWidth + s) / (mHeaderWidth * 1.0)); // 如超过最大放大倍数,直接返回 if (scaleTimes > mScaleTimes) return; ViewGroup.LayoutParams layoutParams = mHeaderView.getLayoutParams(); layoutParams.width = (int) (mHeaderWidth + s); layoutParams.height = (int) (mHeaderHeight * ((mHeaderWidth + s) / mHeaderWidth)); // 设置控件水平居中 ((MarginLayoutParams) layoutParams).setMargins(-(layoutParams.width - mHeaderWidth) / 2,0); mHeaderView.setLayoutParams(layoutParams); } /** * 回弹 */ private void replyView() { final float distance = mHeaderView.getMeasuredWidth() - mHeaderWidth; // 设置动画 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 onSizeChanged(int w,int h,int oldw,int oldh) { super.onSizeChanged(w,h,oldw,oldh); mHeaderWidth = mHeaderView.getMeasuredWidth(); mHeaderHeight = mHeaderView.getMeasuredHeight(); }
@H_301_0@
@H_301_0@demo下载:ZoomInScrollView_code.rar@H_301_0@以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
以上是大佬教程为你收集整理的Android自定义ScrollView实现放大回弹效果实例代码全部内容,希望文章能够帮你解决Android自定义ScrollView实现放大回弹效果实例代码所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。