Android 下拉刷新(使用异步任务和ViewTreeObserver监听)
来源:互联网 发布:mac word 登录 编辑:程序博客网 时间:2024/05/16 02:51
隐藏和显示异步任务,主要是通过控制内边距Pandding来实现
package com.siyehuazhilian.pushdownrefresh;import android.app.Activity;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Handler;import android.view.MotionEvent;import android.view.ViewTreeObserver;import android.view.ViewTreeObserver.OnPreDrawListener;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.Toast;import com.siyehuazhilian.utils.DownImageTask;public class MainActivity extends Activity {private RelativeLayout relativeLayout;private LinearLayout linearLayout;private ImageView imageView;private int refreshHeight;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);relativeLayout = (RelativeLayout) findViewById(R.id.relativelayout);linearLayout = (LinearLayout) findViewById(R.id.linearlayout_refresh);imageView = (ImageView) findViewById(R.id.imageview);ViewTreeObserver observer = linearLayout.getViewTreeObserver();observer.addOnPreDrawListener(new OnPreDrawListener() {@Overridepublic boolean onPreDraw() {if (refreshHeight == 0) {refreshHeight = linearLayout.getMeasuredHeight();relativeLayout.setPadding(0, -refreshHeight, 0, 0);}return true;}});}private int startY;private int distance;@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:startY = (int) event.getRawY();break;case MotionEvent.ACTION_MOVE:distance = (int) ((event.getRawY() - startY) / 1.5);if (distance < linearLayout.getHeight() && distance > 0) {// distance = refreshHeight;relativeLayout.setPadding(0, linearLayout.getHeight()- distance, 0, 0);}break;case MotionEvent.ACTION_UP:// 手指离开,判断是满足刷新的要求// 要求distance要大于等于linearLayout.getHeight()的一半,// 如果大于,就让刷新界面完全展示出来并开启下载任务,如果小于,就重新隐藏刷新界面if (distance > linearLayout.getHeight() / 2) {relativeLayout.setPadding(0, 0, 0, 0);DownImageTask downImageTask = new DownImageTask(handler);downImageTask.execute("http://a.hiphotos.baidu.com/image/w%3D2048/sign=487f5fb067380cd7e61ea5ed957cad34/a6efce1b9d16fdfa575066eeb68f8c5494ee7bf6.jpg");} else {relativeLayout.setPadding(0, -linearLayout.getHeight(), 0, 0);}break;default:break;}return super.onTouchEvent(event);}private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {switch (msg.what) {case 1:Bitmap bitmap = (Bitmap) msg.obj;imageView.setImageBitmap(bitmap);Toast.makeText(MainActivity.this, "更新完毕", 1000).show();// 下载完成还是要隐藏刷新的界面的relativeLayout.setPadding(0, -linearLayout.getHeight(), 0, 0);break;default:break;}};};}
异步任务
package com.siyehuazhilian.utils;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.os.Handler;import android.os.Message;public class DownImageTask extends AsyncTask<String, Integer, Bitmap> {private Handler handler;public DownImageTask(Handler handler) {this.handler = handler;}@Overrideprotected Bitmap doInBackground(String... parems) {Bitmap bitmap = null;try {URL url = new URL(parems[0]);HttpURLConnection connection = (HttpURLConnection) url.openConnection();InputStream inputStream = connection.getInputStream();bitmap = BitmapFactory.decodeStream(inputStream);} catch (Exception e) {e.printStackTrace();}return bitmap;}@Overrideprotected void onPostExecute(Bitmap result) {super.onPostExecute(result);Message message = handler.obtainMessage(1, result);message.sendToTarget();}}
0 0
- Android 下拉刷新(使用异步任务和ViewTreeObserver监听)
- android 下拉刷新使用
- scrollView下拉刷新,异步任务动态添加view
- android使用SwipeRefreshLayout下拉刷新
- Android下拉刷新库使用
- Jquery下拉异步刷新
- Android实现异步从网络加载图片列表和上拉加载更多、下拉刷新列表(使用xListView框架实现)
- Android异步任务AsyncTask使用
- android刷新控件的使用(下拉和上拉刷新)
- Android 下拉刷新控件的使用
- Android下拉刷新框架PullToRefresh使用小结
- Android 下拉刷新控件SwipeRefreshLayout 的使用
- Android 下拉刷新控件的使用
- 【Android】使用 SwipeRefreshLayout 实现下拉刷新
- Android SwipeRefreshLayout 下拉刷新组件的使用
- android使用PulltoRefushGridview实现下拉刷新
- Android SwipeRefreshLayout 官方下拉刷新控件使用
- android 下拉刷新控件SwipeRefreshLayout简单使用
- 可变参数函数
- 32位64位操作系统基本数据类型字节大小
- CUDA4.2 + vs2008配置
- Xcode5中的版本管理(中英对照)
- redies和memcache区别
- Android 下拉刷新(使用异步任务和ViewTreeObserver监听)
- 整理C# 二进制,十进制,十六进制 互转
- Unity3D NGUI动态创建按钮
- 分区表统计信息用法
- Ray - Box Intersection
- 去IOE运动-正在路上
- C++-----虚析构函数
- Asterisk originate的用途
- 2013:由工地到IT的转变