android仿今日头条个人中心页面


效果图

实现步骤:
自定义ScrollView,添加一个反弹的动画
代码:

package com.example.administrator.gerenzhongxin;import android.animation.Animator;import android.animation.AnimatorListenerAdapter;import android.animation.ObjectAnimator;import android.content.Context;import android.os.Build;import android.support.annotation.RequiresApi;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.view.animation.BounceInterpolator;import android.widget.ScrollView;/** * Created At 2018/1/2. * * @author King * @email qwe272938225ms@163.com */public class FlowScrollView extends ScrollView {    private View contentView;    private final float scalCount = 0.5f;//阻尼系数    private float downY;//点击时的y点    private ObjectAnimator objectAnimator;//动画    private float distanceY;//移动距离    private boolean isMoveing = false;//动画是正在进行//    private int scrollHeight = 0;//当内容不足以全屏时,内容随手指可滑动距离    public FlowScrollView(Context context) {        super(context);    }    public FlowScrollView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public FlowScrollView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)    public FlowScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {        super(context, attrs, defStyleAttr, defStyleRes);    }    @Override    protected void onFinishInflate() {//视图加载完成        super.onFinishInflate();        if (getChildCount() > 0) {            contentView = getChildAt(0);//            scrollHeight = contentView.getHeight();        }    }    @Override    public boolean onInterceptTouchEvent(MotionEvent ev) {        return super.onInterceptTouchEvent(ev);    }    @Override    public boolean onTouchEvent(MotionEvent ev) {        if (isMoveing) {            return false;        }        switch (ev.getAction()) {            case MotionEvent.ACTION_DOWN:                downY = ev.getY();                break;            case MotionEvent.ACTION_MOVE:                float deltY = ev.getY() - downY;                if (Math.abs(deltY) > 10 &&(getScrollY() == 0 || (getScrollY()+getHeight())==contentView.getHeight())) {                    contentView.setY(contentView.getY() + deltY * scalCount);                    distanceY += deltY * scalCount;                }                downY = ev.getY();                break;            case MotionEvent.ACTION_UP:                if (Math.abs(distanceY) > 0) {                    objectAnimator = ObjectAnimator.ofFloat(contentView, "translationY", distanceY, -(float) contentView.getTop());                    objectAnimator.setInterpolator(new BounceInterpolator());                    objectAnimator.addListener(new AnimatorListenerAdapter() {                        @Override                        public void onAnimationStart(Animator animation) {                            super.onAnimationStart(animation);                            isMoveing = true;                        }                        @Override                        public void onAnimationEnd(Animator animation) {                            super.onAnimationEnd(animation);                            distanceY = 0;                            isMoveing = false;                        }                    });                    objectAnimator.setDuration(500);                    objectAnimator.start();                }                break;            default:                break;        }        return super.onTouchEvent(ev);    }    @Override    protected void onScrollChanged(int l, int t, int oldl, int oldt) {        super.onScrollChanged(l, t, oldl, oldt);    }}

然后在布局里面替换这个类的地址:

<com.example.administrator.gerenzhongxin.FlowScrollView        android:layout_width="match_parent"        android:background="#333"        android:layout_height="match_parent">        "match_parent"            android:orientation="vertical"            android:layout_height="wrap_content">            "match_parent"                android:src="@mipmap/ic_launcher"                android:layout_height="wrap_content" />            "match_parent"                android:text="hello"                android:textColor="#fff"                android:gravity="center"                android:textSize="40sp"                android:layout_height="wrap_content" />            com.example.administrator.gerenzhongxin.FlowScrollView>

#源码

更多相关文章

  1. 动画 anim
  2. Android(安卓)bootanimation学习
  3. android 上下抽屉拖拽+动画完美实现
  4. 让Android不播放关机动画,而是显示一个关机进度条的方法
  5. android customactivityoncrashchau 程序崩溃处理
  6. Android(安卓)Animation Interpolator - Android(安卓)动画插值
  7. Android(安卓)AnimationDrawable动画实例
  8. Android获取RecyclerView滑动距离
  9. Android(安卓)AnimationDrawable动画实例

随机推荐

  1. EventBus源码详解(一):基本使用
  2. 程序中判断Android系统版本
  3. android调用本地服务示例
  4. Android一行命令上传你的项目到Jcenter/M
  5. [Android] Handler详解
  6. 谷安: 微软、苹果与谷歌的专利问题四格漫
  7. Android之 对话框 的使用
  8. 【Android(安卓)界面效果15】Android(安
  9. Android(安卓)Studio中ShareSDK分享的使
  10. Android(安卓)sdk开发(二) Log日志类的设