Xrecyclerview 上拉 下滑

配置:

 implementation project(':xlibs')
    compile 'com.android.support:design:26+'
    compile 'com.android.support:recyclerview-v7:26+'
    compile 'com.facebook.fresco:fresco:0.7.0'
    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2'
    compile 'com.dalu9527:TextWave:0.0.2'
xlibs怕麻烦,百度网盘下载:https://pan.baidu.com/s/1h7h15QrI4svdkZv6xcTIuQ

出现错误,参考:https://blog.csdn.net/u014095878/article/details/80117686


先写布局文件:

activity_main.xml

 <com.xlibs.xrv.view.XRecyclerView
        android:id="@+id/xrecyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></com.xlibs.xrv.view.XRecyclerView>

custom_header_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:wave="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="51dp"
    android:orientation="horizontal"
    android:gravity="center">

    <com.wave.library.view.WaveTextView
        android:id="@+id/waveTextView"
        android:layout_width="200dp"
        android:layout_height="50dp"
        wave:textColor="@color/colorAccent"
        wave:textSize="17sp"
        wave:waveSpeed="1"
        wave:waveAmplitudes="20"
        wave:text="Hello World"
        wave:autoStart="true"
        android:gravity="center"/>

</LinearLayout>

footer_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal"
    android:background="#fff"
    android:gravity="center">

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@android:style/Widget.ProgressBar.Small"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:text="正在加载..."/>

</LinearLayout>

header_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal"
    android:background="#fff"
    android:gravity="center">

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@android:style/Widget.ProgressBar.Small"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:textSize="20dp"
        android:text="正在刷新..."/>

</LinearLayout>


item_2_image_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    android:orientation="vertical"
    android:background="#ffffff">

    <LinearLayout
        android:id="@+id/linearlayout_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/image2_1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:scaleType="fitXY"/>


        <com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/image2_2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:scaleType="fitXY"/>
    </LinearLayout>



</LinearLayout>


正文:



public class MyApplication extends Application {
    private static final String TAG = "MyApplication";
    @Override
    public void onCreate() {
        super.onCreate();
        initFresco();
//        initLeakCanary();
    }

    /**
     * 初始化LeakCanary
     */
//    private void initLeakCanary() {
//        LeakCanary.install(this);
//    }
    /**
     * 初始化Fresco
     */
    private void initFresco() {
        Fresco.initialize(this);
    }
}
继承Application,不要忘记权限中+name


adapter

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<List<String>> mUrl = new ArrayList<>();

    public MyAdapter(List<List<String>> data) {
        mUrl = data;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_2_image_layout, parent, false);
            return new ImageViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof ImageViewHolder) {
            if(mUrl.size() != 0){
                ((ImageViewHolder) holder).setData(mUrl.get(position));
            }
        }
    }

    @Override
    public int getItemCount() {
        return mUrl.size();
    }
}



MainActivity.java

public class MainActivity extends AppCompatActivity {

    private final static String TAG = "MainActivity";
    private XRecyclerView mXRecyclerView;
    private View mHeaderView;
    private View mFooterView;
    private MyAdapter mMyAdapter;
    private List<List<String>> mLists = new ArrayList<>();
    private Handler mHandler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();

        XLinearLayoutManager xLinearLayoutManager = new XLinearLayoutManager(this);
        XGridLayoutManager xGridLayoutManager = new XGridLayoutManager(this, 2);
        XStaggeredGridLayoutManager xStaggeredGridLayoutManager =
                new XStaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        mXRecyclerView.setLayoutManager(xLinearLayoutManager);
        // 添加下拉刷新的头部 和 加载更多的底部,如果不加,默认含有下拉刷新的头部,而没有加载更多的底部
        mHeaderView = LayoutInflater.from(this).inflate(R.layout.custom_header_view, null);
        mFooterView = LayoutInflater.from(this).inflate(R.layout.footer_view, null);

        mXRecyclerView.addHeaderView(mHeaderView, 50);
        mXRecyclerView.addFootView(mFooterView, 50);
        // 设置adapter
        mMyAdapter = new MyAdapter(mLists);

        mXRecyclerView.setAdapter(mMyAdapter);
        // 添加下拉刷新
        mXRecyclerView.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh() {
                refreshData();
            }
        });
        // 加载更多(如果没有添加加载更多的布局,下面那LoadMore不会执行)
        mXRecyclerView.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore() {
                loadMoreData();
            }
        });
// mXRecyclerView.setEnableRefreshAndLoadMore(false);
// mXRecyclerView.setRefresh(false);
        
    }

    /**
     * refresh
     */
    private void refreshData() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                initRefreshData();
                mXRecyclerView.refreshComplate();
            }
        }, 2000);
    }

    /**
     * init refrsh data
     */
    private void initRefreshData() {
        for (int i = 0; i < 1; i++) {
            List<String> url = new ArrayList<>();
            url.add("http://qq1234.org/uploads/allimg/140404/3_140404114606_1.jpg");
            url.add("http://qq1234.org/uploads/allimg/140404/3_140404114555_6.jpg");
            mLists.add(url);
        }
    }

    private void initView() {
        mXRecyclerView = (XRecyclerView) findViewById(R.id.xrecyclerview);
    }

    /**
     * load more
     */
    private void loadMoreData() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                initLoadMoreData();
                mXRecyclerView.loadMoreComplate();
            }
        }, 2000);
    }

    /**
     * init Load More Data
     */
    private void initLoadMoreData() {
        for (int i = 0; i < 2; i++) {
            List<String> url = new ArrayList<>();
            url.add("http://qq1234.org/uploads/allimg/140404/3_140404114555_5.jpg");
            url.add("http://qq1234.org/uploads/allimg/140404/3_140404114555_4.jpg");
            mLists.add(url);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mXRecyclerView.destroyHandler();
    }
}

最重要的2部分,按理说要最早写的

public class BaseViewHolder<T> extends RecyclerView.ViewHolder {

    public BaseViewHolder(View itemView) {
        super(itemView);
    }
    /**
     * data
     * @param data
     */
    public void setData(List<T> data){}

}


public class ImageViewHolder extends BaseViewHolder<String>{
    private static final String TAG = "ImageViewHolder";
    private LinearLayout mLayout;
    private SimpleDraweeView mImage_1;
    private SimpleDraweeView mImage_2;
    public ImageViewHolder(View itemView) {
        super(itemView);
        mLayout = (LinearLayout)itemView.findViewById(R.id.layout);
        mImage_1 = (SimpleDraweeView)itemView.findViewById(R.id.image2_1);
        mImage_2 = (SimpleDraweeView)itemView.findViewById(R.id.image2_2);
    }

    @Override
    public void setData(List<String> data) {
        super.setData(data);
        mImage_1.setImageURI(Uri.parse(data.get(0)));
        mImage_2.setImageURI(Uri.parse(data.get(1)));
        mImage_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               Log.e(TAG,"click left");
            }
        });
        mImage_2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e(TAG,"click right");
            }
        });
    }
}

最后加一个联网权限





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值