Android 实现简单的ListView下拉刷新
程序员文章站
2024-03-21 17:40:46
...
-
首先了解刷新的原理
参考:http://blog.csdn.net/guolin_blog/article/details/9255575 -
转载注明出处:https://blog.csdn.net/qq_28996795/article/details/103247448
下面是实现的效果:
xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fr"
>
//这里隐藏掉当前布局
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="-60dp"
android:id="@+id/l1"
>
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="180dp"
android:id="@+id/bar"
/>
</LinearLayout>
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</FrameLayout>
</LinearLayout>
Activity:代码 主要通过实现OnTouchListener监听来实现刷新
package com.example.newword;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.example.okhttp.R;
import java.util.ArrayList;
import java.util.List;
public class T2Activity extends Activity implements View.OnTouchListener {
private ListView ls;
private ProgressBar bar;
private ListView list;
private FrameLayout fr;
float myx;
private LinearLayout l1;
boolean Yes=true;
int State=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.t2_1);
initView();
}
private void initView() {
bar = (ProgressBar) findViewById(R.id.bar);
list = (ListView) findViewById(R.id.list);
fr = (FrameLayout) findViewById(R.id.fr);
list.setOnTouchListener(this);
l1 = (LinearLayout) findViewById(R.id.l1);
List<String> list=new ArrayList<>();
for (int i = 0; i <50 ; i++) {
list.add("测试"+i);
}
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,list);
this.list.setAdapter(adapter);
}
/**
* 刷新
* @param v
* @param event
* @return
*/
@Override
public boolean onTouch(View v, MotionEvent event) {
//得到list 的第一个itme 位置
int fist=list.getFirstVisiblePosition();
if (Yes)
{
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (State==1)
{
Yes=false;
return false;
}
State=0;
//记录按下时屏幕的Y
myx = event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
float y1=event.getRawY()/2;
if ((int) (y1-myx)>=150)
{
State=1;
return false;
}
//位置为0时改变Margins
if (fist==0)
{
FrameLayout.LayoutParams pl=new FrameLayout.LayoutParams(l1.getLayoutParams());
pl.setMargins(0, (int) (y1-myx),0,0);
l1.setLayoutParams(pl);
}
break;
case MotionEvent.ACTION_UP:
float y = event.getRawY()/2;
if (y - myx > 150) {
Log.i("TAG", "onTouch: " + y + " " + myx);
bar.setVisibility(View.VISIBLE);
new Handler().postDelayed(() -> {
//bar.setVisibility(View.INVISIBLE);
//调用刷新回调
/*
* 刷新回调 这里可以写刷新方法 或者刷新的回调
* */
FrameLayout.LayoutParams p2=new FrameLayout.LayoutParams(l1.getLayoutParams());
p2.setMargins(0, -120,0,0);
l1.setLayoutParams(p2);
State=0;
Yes=true;
Toast.makeText(T2Activity.this,"刷新致最新",Toast.LENGTH_LONG).show();
}, 3000);
//失去焦点
return false;
}else //没有达到刷新
{
FrameLayout.LayoutParams p2=new FrameLayout.LayoutParams(l1.getLayoutParams());
p2.setMargins(0, -120,0,0);
l1.setLayoutParams(p2);
State=0;
Yes=true;
}
break;
}
}
else
{
State=0;
}
return false;
}
}
这样就达到完美想要的效果!我们也可以把进度条换成我们的布局文件通过改变外边距来达到其他样式的下拉刷新.
推荐阅读
-
android实现简单的ListView
-
Android 实现简单的ListView下拉刷新
-
PullToRefresh 上下拉刷新 简单实现
-
3年以上勿进!最简单的Android自定义ListView下拉刷新与上拉加载,代码直接拿去用~
-
Android ListView实现仿iPhone实现左滑删除按钮的简单实例
-
Android简单实现屏幕下方Tab菜单的方法
-
Android基于ListView实现类似QQ空间的滚动翻页与滚动加载效果
-
Android实现便于批量操作可多选的图片ListView实例
-
Android实现Listview异步加载网络图片并动态更新的方法
-
Android简单记录和恢复ListView滚动位置的方法