有adapter、application、bean、view这几个包 接下来就按照顺序去写一下
首先是adapter
public class MyPagerAdapter extends PagerAdapter{
Context context;
List<String> alist;
public MyPagerAdapter(Context context, List<String> alist) {
this.context=context;
this.alist=alist;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(context);
ImageLoader.getInstance().displayImage(alist.get(position%=alist.size()),imageView);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
-------------------------------------------------------
public class MyxlvAdapter extends BaseAdapter{
private int LEFT_IMAGE=0;
private int RIGHT_IMAGE=1;
Context context;
List<DataDataBean.DataBean> list;
public MyxlvAdapter(Context context, List<DataDataBean.DataBean> list) {
this.context=context;
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 LEFT_IMAGE;
}
else{
return RIGHT_IMAGE;
}
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if(getItemViewType(i)==LEFT_IMAGE)
{
ViewHolder_01 holder=null;
if(view==null)
{
view=View.inflate(context, R.layout.left_layout,null);
holder=new ViewHolder_01();
holder.tv=(TextView) view.findViewById(R.id.left_tv);
holder.iv= (ImageView) view.findViewById(R.id.left_iv);
view.setTag(holder);
}
else{
holder= (ViewHolder_01) view.getTag();
}
holder.tv.setText(list.get(i).getTitle());
ImageLoader.getInstance().displayImage(list.get(i).getImg(),holder.iv, ImageLoaderUtil.getCircleOption());
}
else{
ViewHolder holder=null;
if(view==null)
{
view=View.inflate(context, R.layout.right_layout,null);
holder=new ViewHolder();
holder.tv=(TextView) view.findViewById(R.id.right_tv);
view.setTag(holder);
}
else{
holder= (ViewHolder) view.getTag();
}
holder.tv.setText(list.get(i).getTitle());
//ImageLoader.getInstance().displayImage(list.get(i).getImg(),holder.iv, ImageLoaderUtil.getDefaultOption());
}
return view;
}
private class ViewHolder_01{
TextView tv;
ImageView iv;
}
private class ViewHolder{
TextView tv;
ImageView iv;
}
}
--------------------------------------------------
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Environment;
import com.bawei.administrator.lianxi_1013ev.R;
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.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
import com.nostra13.universalimageloader.utils.StorageUtils;
import java.io.File;
/**
* @author Dash
* @date 2017/10/10
* @description:
*/
public class ImageLoaderUtil {
/**
* 对imageLoader进行配置的方法
* @param context 上下文
*/
public static void init(Context context) {
File cacheDir = StorageUtils.getCacheDirectory(context); //指定默认的硬盘(sd卡)的缓存文件夹路径
/**
* 可以自己创建一个sd下面的文件夹作为硬盘缓存的路径
*/
File file = new File(Environment.getExternalStorageDirectory(),"image");
if (! file.exists()){
file.mkdirs();
}
//1.创建一个ImageLoaderConfiguration,,,图片加载器的配置对象
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.threadPoolSize(3) // default 线程池内加载的数量
.threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
.tasksProcessingOrder(QueueProcessingType.FIFO) // default
.denyCacheImageMultipleSizesInMemory()
//1 TB = 1024GB 1G=1024MB 1M = 1024KB 1KB = 1024BYTE
//LruMemoryCache,,lru最近最少使用算法...内部维护的是LinkedHashMap,,当一张图片最近很少使用的时候会从mao集合里面移除
.memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //指定内存缓存的大小,,2M,,可以通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值
.memoryCacheSizePercentage(13) // default
//指定硬盘/磁盘缓存的路径
.diskCache(new UnlimitedDiskCache(cacheDir)) // default 可以自定义缓存路径
.diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
.diskCacheFileCount(100) // 可以缓存的文件数量
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
.writeDebugLogs() // 打印debug log
.build(); //开始构建
//2.对上面配置对象的初始化
ImageLoader.getInstance().init(config);
}
/**
* 默认的展示图片的选项
*
* @return
*/
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 设置图片在加载前是否重置、复位
.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;
}
/**
* 展示圆角的选项
* @return
*/
public static DisplayImageOptions getRoundOption() {
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片
.showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片
.resetViewBeforeLoading(true) // default 设置图片在加载前是否重置、复位
.cacheInMemory(true) // default 设置下载的图片是否缓存在内存中
.cacheOnDisk(true) // default 设置下载的图片是否缓存在SD卡中
.considerExifParams(true) // default
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED) // default 设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型
.displayer(new RoundedBitmapDisplayer(20)) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20)
.build();
return options;
}
/**
* 展示圆形的选项
* @return
*/
public static DisplayImageOptions getCircleOption() {
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片
.showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片
.resetViewBeforeLoading(true) // default 设置图片在加载前是否重置、复位
.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;
}
}
-----------------------------------------------------------------------------------------
就剩主方法了
public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener {
private XListView xlv;
private ListView lv;
private ViewPager vp;
private List<String> title;
private List<DataDataBean.DataBean> list=new ArrayList<>();
private MyxlvAdapter myadapter;
private List<String> alist=new ArrayList<>();
private ImageView iv;
private DrawerLayout dl;
private RelativeLayout relaa;
int NUM=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xlv = (XListView) findViewById(R.id.xlv);
lv = (ListView) findViewById(R.id.lview);
//vp = (ViewPager) findViewById(R.id.vp);
iv = (ImageView) findViewById(R.id.iv);
dl = (DrawerLayout) findViewById(R.id.draw);
relaa = (RelativeLayout) findViewById(R.id.relaa);
xlv.setPullRefreshEnable(true);
xlv.setPullLoadEnable(true);
xlv.setXListViewListener(this);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dl.closeDrawer(relaa);
}
});
title = new ArrayList<>();
title.add("头条");
title.add("社会");
title.add("国内");
title.add("军事");
title.add("财经");
ArrayAdapter adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, title);
lv.setAdapter(adapter);
getDataFromNet();
}
private void getDataFromNet() {
AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... voids) {
try {
String path = "http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page="+NUM;
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.setRequestMethod("GET");
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) {
Log.i("json" , s);
Gson gson = new Gson();
DataDataBean dataDataBean = gson.fromJson(s, DataDataBean.class);
list.addAll(dataDataBean.getData());
setAdapter();
//停止加载
xlv.stopLoadMore();
for(int i=0;i<dataDataBean.getData().size();i++)
{
alist.add(dataDataBean.getData().get(i).getImg());
}
//MyPagerAdapter myPagerAdapter = new MyPagerAdapter(MainActivity.this,alist);
// vp.setAdapter(myPagerAdapter);
//初始化小圆点
}
};
asyncTask.execute();
}
private void setAdapter() {
if (myadapter == null){
MyxlvAdapter myadapter=new MyxlvAdapter(MainActivity.this, list);
xlv.setAdapter(myadapter);
}else {
myadapter.notifyDataSetChanged();
}
}
private String streamToString(InputStream inputStream, String s) {
try {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream,s);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String string=null;
StringBuilder stringBuilder = new StringBuilder();
while((string=bufferedReader.readLine())!=null)
{
stringBuilder.append(string);
}
bufferedReader.close();
return stringBuilder.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public void onRefresh() {
AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... voids) {
try {
String path = "http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page=1";
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.setRequestMethod("GET");
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(dataDataBean.getData());
setAdapter();
xlv.stopRefresh();
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
xlv.setRefreshTime(simpleDateFormat.format(date));
}
};
asyncTask.execute();
}
@Override
public void onLoadMore() {
NUM++;
getDataFromNet();
}
}
下面是布局
主布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
android:id="@+id/draw"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/rela"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--<android.support.v4.view.ViewPager-->
<!--android:id="@+id/vp"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="200dp"></android.support.v4.view.ViewPager>-->
<com.bawei.administrator.lianxi_1013ev.view.XListView
android:id="@+id/xlv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/vp"></com.bawei.administrator.lianxi_1013ev.view.XListView>
</RelativeLayout>
<RelativeLayout
android:id="@+id/relaa"
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="#fff">
<ImageView
android:id="@+id/iv"
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@mipmap/ic_launcher"/>
<ListView
android:layout_below="@+id/iv"
android:id="@+id/lview"
android:layout_width="match_parent"
android:layout_height="200dp"></ListView>
</RelativeLayout>
</android.support.v4.widget.DrawerLayout>
***************************
左图右文字布局
<?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="match_parent">
<ImageView
android:id="@+id/left_iv"
android:layout_width="100dp"
android:layout_height="100dp" />
<TextView
android:id="@+id/left_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
只有文字的布局
<?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="match_parent">
<TextView
android:id="@+id/right_tv"
android:gravity="right"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>