侧拉+上下拉动

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.hello.myappzhoukao2lianxi.MainActivity">
    <com.example.hello.myappzhoukao2lianxi.view.XListView
        android:id="@+id/xlv"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </com.example.hello.myappzhoukao2lianxi.view.XListView>
    <RelativeLayout
        android:background="#ffffff"
        android:id="@+id/drawer_relative"
        android:layout_gravity="left"
        android:layout_width="200dp"
        android:layout_height="match_parent">

        <ImageView
            android:id="@+id/image_touxiang"
            android:layout_centerHorizontal="true"
            android:layout_margin="10dp"
            android:src="@mipmap/ic_launcher"
            android:layout_width="80dp"
            android:layout_height="80dp" />



    </RelativeLayout>
</android.support.v4.widget.DrawerLayout>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
item_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/img"
        android:layout_width="100dp"
        android:layout_height="100dp" />
    <TextView
        android:id="@+id/txt_title"
        android:textSize="25dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
package com.example.hello.myappzhoukao2lianxi;

import android.app.Application;

/**
 * Created by on 2017/10/14.
 */

public class BaseApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ImageLoaderUtil.init(this);
    }
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
package com.example.hello.myappzhoukao2lianxi;

import android.content.Context;
import android.graphics.Bitmap;
import android.os.Environment;

import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.display.CircleBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;

import java.io.File;

/**
 * Created by on 2017/10/14.
 */

public class ImageLoaderUtil  {
    public static void init(Context context){
        File file = new File(Environment.getExternalStorageDirectory(),"image");
        if (! file.exists()){
            file.mkdirs();
        }
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)

                .threadPoolSize(3) // default  线程池内加载的数量
                .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
                .tasksProcessingOrder(QueueProcessingType.FIFO) // default
                .denyCacheImageMultipleSizesInMemory()
                .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
                .memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值
                .memoryCacheSizePercentage(13) // default
                .diskCache(new UnlimitedDiskCache(file)) // default 可以自定义缓存路径
                .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
                .diskCacheFileCount(100)  // 可以缓存的文件数量
                // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密

                .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
                .writeDebugLogs() // 打印debug log
                .build(); //开始构建
        ImageLoader.getInstance().init(config);

    }
    public static DisplayImageOptions getDefaultOption(){
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片
                .resetViewBeforeLoading(true)  // default 设置图片在加载前是否重置、复位
                .delayBeforeLoading(1000)  // 下载前的延迟时间
                .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
                .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中

                .considerExifParams(true) // default
                .imageScaleType(ImageScaleType.EXACTLY_STRETCHED) // default 设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型

                .displayer(new SimpleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)

                .build();
        return options;
    }
    public static DisplayImageOptions getDefaultOptionyuan(){
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片
                .resetViewBeforeLoading(true)  // default 设置图片在加载前是否重置、复位
                .delayBeforeLoading(1000)  // 下载前的延迟时间
                .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
                .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中

                .considerExifParams(true) // default
                .imageScaleType(ImageScaleType.EXACTLY_STRETCHED) // default 设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型

                .displayer(new CircleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)

                .build();
        return options;
    }
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
package com.example.hello.myappzhoukao2lianxi;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;

import com.example.hello.myappzhoukao2lianxi.view.XListView;
import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener{
    private DrawerLayout dl;

    private RelativeLayout rl;
    private List<DataDataBean.DataBean> list = new ArrayList<>();
    private XListView xlv;
    private MyAdapter myAdapter;
    private int page_num=1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dl = (DrawerLayout) findViewById(R.id.drawer_layout);
        //主内容区域的布局

        //抽屉布局
        rl = (RelativeLayout) findViewById(R.id.drawer_relative);
        xlv = (XListView)findViewById(R.id.xlv);
        xlv.setPullRefreshEnable(true);
        xlv.setPullLoadEnable(true);
        xlv.setXListViewListener(this);
        getDataFromNet();
        //给listView设置适配器

        ImageView imageView=(ImageView)findViewById(R.id.image_touxiang) ;
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                dl.closeDrawer(rl);
            }
        });

        //设置点击事件

        //抽屉的监听事件
        dl.setDrawerListener(new DrawerLayout.DrawerListener() {

            /**
             *
             * @param drawerView
             * @param slideOffset 表示的抽屉拖出来的宽度,,像素值
             */
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {

            }

            /**
             * 抽屉打开了
             * @param drawerView
             */
            @Override
            public void onDrawerOpened(View drawerView) {

            }

            /**
             * 抽屉关闭
             * @param drawerView
             */
            @Override
            public void onDrawerClosed(View drawerView) {

            }

            /**
             * 抽屉的状态改变
             *
             * idle -- 表示与导航视图没有交互,静止
             dragging -- 表示目前有与导航视图的交互,拖拽的状态
             settling -- 表示有与导航视图的交互,并且导航视图正在关闭或打开
             * @param newState
             */
            @Override
            public void onDrawerStateChanged(int newState) {
                Log.i("zhaungtai---",newState+"---");
            }
        });

    }
    private void getDataFromNet() {
        page_num ++;
        AsyncTask<Void,Void,String> as=new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {
                try {
                    URL url = new URL("http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page=1");
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();

                    connection.setRequestMethod("GET");
                    connection.setReadTimeout(5000);
                    connection.setConnectTimeout(5000);

                    //获取
                    int responseCode = connection.getResponseCode();

                    if (responseCode == 200){
                        InputStream inputStream = connection.getInputStream();

                        String json = streamToString(inputStream,"utf-8");
                        Log.d("TAG","++++++++++++++++"+json);
                        return json;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

                return null;
            }

            @Override
            protected void onPostExecute(String s) {
                Gson gson = new Gson();
                DataDataBean da = gson.fromJson(s, DataDataBean.class);
                List<DataDataBean.DataBean> list = da.getData();


                list.addAll(da.getData());


                setAdapter();
                xlv.stopLoadMore();
            }
        };
        as.execute();
    }
    public void onRefresh() {
        page_num ++;

        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {

                String path = "http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page="+page_num;
                try {
                    URL url = new URL(path);

                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    //设置
                    connection.setRequestMethod("GET");
                    connection.setReadTimeout(5000);
                    connection.setConnectTimeout(5000);

                    //获取
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200){
                        InputStream inputStream = connection.getInputStream();

                        String json = streamToString(inputStream,"utf-8");

                        return json;
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }

                return null;
            }

            @Override
            protected void onPostExecute(String s) {
                Gson gson = new Gson();

                DataDataBean dataDataBean = gson.fromJson(s, DataDataBean.class);

                //下拉刷新的数据需要添加在大集合的最前边
                list.addAll(0,dataDataBean.getData());

                //设置适配器...
                setAdapter();

                //...............设置完数据之后刷新需要停止
                xlv.stopRefresh();//停止刷新

                //System.currentTimeMillis()....当前时间的long类型的值

                Date date = new Date(System.currentTimeMillis());
                //格式化....yyyy-MM-dd HH:mm
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");

                //设置本次刷新的时间
                xlv.setRefreshTime(simpleDateFormat.format(date));
            }
        };

        asyncTask.execute();
    }
    //上拉

    public void onLoadMore() {
        getDataFromNet();

    }
    //适配器
    private void setAdapter() {
        if (myAdapter == null){

            myAdapter = new MyAdapter(MainActivity.this, list);
            xlv.setAdapter(myAdapter);
        }else {
            myAdapter.notifyDataSetChanged();
        }
    }
    private String streamToString(InputStream inputStream, String charset) {
        try {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset);

            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String s = null;
            StringBuilder builder = new StringBuilder();
            while ((s = bufferedReader.readLine()) != null){
                builder.append(s);
            }
            bufferedReader.close();
            return builder.toString();

        } catch (Exception e) {
            e.printStackTrace();
        }

        return  null;
    }
}
++++++++++++++++++++++++++++++++++++++++++++++++++++
package com.example.hello.myappzhoukao2lianxi;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.List;

/**
 * Created by on 2017/10/14.
 */

public class MyAdapter extends BaseAdapter {
    Context ct;
    List<DataDataBean.DataBean> list;
    private int TYTLE_ONLY = 0;//只有文字的形式
    private int IMAGE_LEFT = 1;//表示图片在左边,文字在右边
    public MyAdapter(Context ct, List<DataDataBean.DataBean> list) {
        this.ct = ct;
        this.list = list;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }
    @Override
    public int getViewTypeCount() {

        return 2;
    }
    @Override
    public int getItemViewType(int position) {
        if (position%2 == 0){
            return TYTLE_ONLY;
        }else if (position %2==1){
            return IMAGE_LEFT;
        }
        return TYTLE_ONLY;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        if (getItemViewType(i) == TYTLE_ONLY){
            ViewHolder holder;
            if (view == null){
                view = View.inflate(ct,R.layout.item_list,null);
                holder = new ViewHolder();
                holder.imageView=view.findViewById(R.id.img);
                holder.textView = view.findViewById(R.id.txt_title);

                view.setTag(holder);
            }else {
                holder = (ViewHolder) view.getTag();
            }
            holder.textView.setText(list.get(i).getTitle());
            ImageLoader.getInstance().displayImage(list.get(i).getImg(),holder.imageView,ImageLoaderUtil.getDefaultOptionyuan());

        }else if (getItemViewType(i) == IMAGE_LEFT){
            TitleHolder holder;
            if (view == null){
                view = View.inflate(ct,R.layout.item_list2,null);
                holder = new TitleHolder();
                holder.textView = view.findViewById(R.id.txt_title);

                view.setTag(holder);
            }else {
                holder = (TitleHolder) view.getTag();
            }
            holder.textView.setText(list.get(i).getTitle());
        }


        return view;
    }
    private class TitleHolder{
        TextView textView;
    }
    private class ViewHolder{
        ImageView imageView;
        TextView textView;
    }

}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值