WebView 下拉刷新
来源:互联网 发布:php小项目 编辑:程序博客网 时间:2024/06/05 06:35
下拉刷新已经是非常常见的效果了,那么也有很多优秀的控件。
这里分享的是用refreshlayout 思想开发自定义控件。
优点代码更加简洁,修改起来更加方便。
源码:
public class WebViewRefreshLayout extends LinearLayout implementsOnTouchListener {RelativeLayout header;TextView description;boolean loadOnce;int hideHeaderHeight;MarginLayoutParams headerLayoutParams;WebView webView;Context context;boolean ableToPull;float yDown;int touchSlop;int PULL =0;int RELEASA=1;int REFRESHING=2;int END=3;int currentStatus = END;int lastStatus = currentStatus;Runnable mListener;int pullTime = 200;public WebViewRefreshLayout(Context context, AttributeSet attrs) {super(context, attrs);this.context = context;touchSlop = ViewConfiguration.get(context).getScaledTouchSlop();}@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {super.onLayout(changed, l, t, r, b);if (changed && !loadOnce) {loadOnce = true;header = (RelativeLayout) getChildAt(0);description = (TextView)header.getChildAt(0);webView = (WebView) getChildAt(1);webView.setOnTouchListener(this);hideHeaderHeight = -header.getHeight();headerLayoutParams = (MarginLayoutParams) header.getLayoutParams();headerLayoutParams.topMargin = hideHeaderHeight;header.setLayoutParams(headerLayoutParams);}}@Overridepublic boolean onTouch(View arg0, MotionEvent arg1) {setIsAbleToPull(arg1);if (ableToPull) {switch (arg1.getAction()) {case MotionEvent.ACTION_DOWN:yDown = arg1.getRawY();break;case MotionEvent.ACTION_MOVE:int distance=(int)(arg1.getRawY()-yDown);if (distance<=0 && headerLayoutParams.topMargin <= hideHeaderHeight) {return false;}if (distance<touchSlop) {return false;}if (currentStatus!=REFRESHING) {if (headerLayoutParams.topMargin>0) {currentStatus = RELEASA;}else {currentStatus = PULL;}headerLayoutParams.topMargin = (distance/2)+hideHeaderHeight;header.setLayoutParams(headerLayoutParams);}break;case MotionEvent.ACTION_UP:default:if (currentStatus==RELEASA) {RefreshingTask();}if (currentStatus==PULL) {HideHeaderTask();}break;}if (currentStatus==RELEASA|| currentStatus==PULL) {updateHeaderView();webView.setPressed(false);webView.setFocusable(false);webView.setFocusableInTouchMode(true);lastStatus=currentStatus;return true;}}return false;}private void HideHeaderTask() {// TODO Auto-generated method stubValueAnimator valueAnimator=ValueAnimator.ofInt(headerLayoutParams.topMargin, hideHeaderHeight);valueAnimator.setDuration(pullTime);valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator arg0) {// TODO Auto-generated method stubint integer=((Integer)arg0.getAnimatedValue()).intValue();headerLayoutParams.topMargin = integer;header.setLayoutParams(headerLayoutParams);if (integer==hideHeaderHeight) {currentStatus = END;}updateHeaderView();}});valueAnimator.start();}private void RefreshingTask() {ValueAnimator valueAnimator = ValueAnimator.ofInt(headerLayoutParams.topMargin, 0);valueAnimator.setDuration(pullTime);valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator arg0) {int integer=((Integer)arg0.getAnimatedValue()).intValue();headerLayoutParams.topMargin = integer;header.setLayoutParams(headerLayoutParams);if (integer == 0) {currentStatus = REFRESHING;if (mListener!=null) {mListener.run();}}updateHeaderView();}});valueAnimator.start();}public void setOnRefreshListener(Runnable pullToRefreshListener){mListener = pullToRefreshListener;}private void updateHeaderView() {if (lastStatus!=currentStatus) {if (currentStatus==RELEASA) {description.setText("放手回到上面");}else if (currentStatus==PULL) {description.setText("下拉回到上面");}else if (currentStatus==REFRESHING) {description.setText("正在加载");}}}private void setIsAbleToPull(MotionEvent arg1) {if (webView.getScrollY() <= 0) {if (!ableToPull) {yDown = arg1.getRawY();}ableToPull = true;} else {if (headerLayoutParams.topMargin != hideHeaderHeight) {headerLayoutParams.topMargin = hideHeaderHeight;header.setLayoutParams(headerLayoutParams);}ableToPull = false;}}public void finishRefreshing(){currentStatus = END;HideHeaderTask();}}
xml布局:
<com.example.mydome.WebViewRefreshLayout android:id="@+id/webview_shop_content" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:visibility="visible" > <!-- 下拉刷新头部开始 --> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="17dp" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="下拉回到上面" /> </RelativeLayout> <!-- 下拉刷新头部结束 --> <WebView android:id="@+id/shop_webview" android:layout_width="match_parent" android:layout_height="match_parent" /> </com.example.mydome.WebViewRefreshLayout>
使用代码:
webViewRefreshLayout.setOnRefreshListener(new Runnable() {@Overridepublic void run() {//PrevPage();//刷新执行代码handler.postDelayed(new Runnable() {@Overridepublic void run() {// 数据加载完毕后执行的回收头部操作webViewRefreshLayout.finishRefreshing();}}, 3000);}});
0 0
- WebView下拉刷新解决办法
- Android WebView下拉刷新
- WebView下拉刷新Demo
- WebView下拉刷新Demo
- WebView 下拉刷新
- Android webview 下拉刷新
- android webview 下拉刷新
- android webview 下拉刷新
- iOS swift webview下拉刷新
- PullRefreshLayout+WebView实现下拉刷新
- webview里面的js下拉刷新
- 自定义可下拉刷新的WebView
- 【Android】Webview 如何使用SwipeRefreshLayout下拉刷新
- 下拉刷新 上拉更多 支持ListView GridView WebView
- Android 下拉刷新控件SwipeRefreshLayout结合WebView使用
- Android 下拉刷新控件SwipeRefreshLayout结合WebView使用
- Android 下拉刷新控件SwipeRefreshLayout结合WebView使用
- webview 实现下拉刷新,只需要三步
- C语言(练习篇)
- 利用URL重写实现搜索分页
- AJAX
- Android 仿微信 录音获取录音文件 和录音时间 录音动画和 播放动画
- ofbiz 官网例子整理
- WebView 下拉刷新
- Subsets II
- svn 断开连接
- java中方法的参数的作用
- jQuery Raty - 不错的星级评分插件
- PAT乙级(Basic Level)1018(C++)
- 字符串长度及截取(中文2字符,英文1字符)
- hdu 5861 Road 线段树区间更新
- UVALive 3942 字典树板子