两个接口实现多条目+ImageLoad图片圆形效果

版权声明:叮叮叮!!!! https://blog.csdn.net/Xuexx_520/article/details/83027694

开始布局

两个接口为头条,国内。需要加载完头条数据,再展示国内数据

头条布局如下(不带图片)

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    >

    <TextView
        android:id="@+id/title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:maxLines="1"
        android:text="标题"
        android:textColor="#000"
        android:textSize="20sp"
        app:layout_constraintBottom_toTopOf="@id/author"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />

    <TextView
        android:id="@+id/author"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:maxLines="1"
        android:text="作者"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/title"
        />
</android.support.constraint.ConstraintLayout>

国内布局如下(包含图片)

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    >

    <ImageView
        android:id="@+id/iv"
        android:layout_width="160dp"
        android:layout_height="100dp"

        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />

    <TextView
        android:id="@+id/title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:maxLines="1"
        android:text="标题"
        android:textColor="#000"
        android:textSize="20sp"
        app:layout_constraintBottom_toTopOf="@id/author"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@id/iv"
        app:layout_constraintTop_toTopOf="parent"
        />

    <TextView
        android:id="@+id/author"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:maxLines="1"
        android:text="作者"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@id/iv"
        app:layout_constraintTop_toBottomOf="@id/title"
        />
</android.support.constraint.ConstraintLayout>

activity-main只有一个listview

java代码

package com.bwie.xuexinxin;


import android.annotation.SuppressLint;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ListView;

import com.google.gson.Gson;

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtilsHC4;

import java.io.IOException;
import java.util.ArrayList;

import adapter.MAdapter;
import bean.News;

public class MainActivity extends AppCompatActivity {
   private MAdapter ma;
   private ListView lv;
   private ArrayList<News.ResultBean.DataBean> list;
    News news;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv=findViewById(R.id.lv);
        list=new ArrayList<News.ResultBean.DataBean>();
        ma=new MAdapter(MainActivity.this,list);
      lv.setAdapter(ma);
        //获取网络数据
        loadData();

    }

    private void loadData() {
        @SuppressLint("StaticFieldLeak") AsyncTask<String,String,ArrayList<News.ResultBean.DataBean>> asyncTask=new AsyncTask<String, String, ArrayList<News.ResultBean.DataBean>>() {
            @Override
            protected ArrayList<News.ResultBean.DataBean> doInBackground(String... strings) {

               //1 创建client
                CloseableHttpClient httpClient= HttpClients.createDefault();
               for (String url:strings){
                   //2.创建请求
                   HttpUriRequest request =RequestBuilder.get().setUri(url).build();

                   try {
                       //3 执行请求
                       CloseableHttpResponse response=httpClient.execute(request);
                       //4.获取响应结果
                       int statusCode=response.getStatusLine().getStatusCode();
                       if(statusCode==200){
                           publishProgress("获取: " + url + "响应成功");
                           String textString= EntityUtilsHC4.toString(response.getEntity());
                           Gson gson=new Gson();
                           news=gson.fromJson(textString,News.class);
                           ArrayList<News.ResultBean.DataBean> data= (ArrayList<News.ResultBean.DataBean>) news.getResult().getData();
                           list.addAll(data);


                           publishProgress("获取: " + url + "数据成功");
                       } else {
                           publishProgress("获取: " + url + "响应失败");
                       }

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

               }

                return list;
            }
            @Override
            protected void onProgressUpdate(String... values) {
                super.onProgressUpdate(values);
                Log.e("TEST", "任务进度更新: " + values[0]);
            }
            //数据传递到主线程,更新UI
            protected void onPostExecute(ArrayList<News.ResultBean.DataBean> dataBeans) {
                super.onPostExecute(dataBeans);

                ma.notifyDataSetChanged();

            }


        };
        //两个接口
        asyncTask.execute(
                "http://result.eolinker.com/k2BaduF2a6caa275f395919a66ab1dfe4b584cc60685573?uri=tt",
                "http://result.eolinker.com/k2BaduF2a6caa275f395919a66ab1dfe4b584cc60685573?uri=gn"
        );

    }
}

ImageLoad配置代码

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ImageLoader.getInstance().init(ImageloadConfigs.getCon(this));
    }
}
 
 
​
public static ImageLoaderConfiguration getCon(Context context) {
    ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context)
        //内在缓存额外选项, 最大的宽度,高度
        //.memoryCacheExtraOptions(480, 800) // default = device screen dimensions 内存缓存文件的最大长宽
        //.diskCacheExtraOptions(480, 800, null)  // 本地缓存的详细信息(缓存的最大长宽),最好不要设置这个
        //线程池配置
        //.taskExecutor()
        //.taskExecutorForCachedImages()
        //.threadPoolSize(3) // default  线程池内加载的数量
        //.threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
        //任务处理优先级 Fist In Fist Out
        //.tasksProcessingOrder(QueueProcessingType.FIFO) // default
        //内存中不缓存一张图片的多个尺寸大小
        //.denyCacheImageMultipleSizesInMemory()
        //内在缓存策略
        //.memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
        //内存缓存大小
        //.memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值
        //内在缓存大小:占用百分比
        .memoryCacheSizePercentage(13) // default
        //磁盘缓存策略
        //.diskCache(new LruDiskCache()) // default 可以自定义缓存路径
        //磁盘缓存大小
        .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
        //.diskCacheFileCount(100)  // 可以缓存的文件数量
        // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
        //.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
        //.imageDownloader(new BaseImageDownloader(context)) // default
        //(new BaseImageDecoder(false)) // default
        //加载具体图片时的一些配置
        //.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
		.defaultDisplayImageOptions(getOps)
		//缓存图片到指定文件夹
		 File file=new File(Environment.getExternalStorageDirectory().getPath()+"/imagefile")
		 .diskCache(new UnlimitedDiskCache(file))
        .writeDebugLogs() // 打印debug log
        .build();
 
    return configuration;
  }
 
  public static DisplayImageOptions getOps(Context context) {
    DisplayImageOptions displayImageOptions = new DisplayImageOptions.Builder()
        //是否缓存
        .cacheInMemory(true)
        .cacheOnDisk(true)
        //RGB 565   r红色占5   g绿色占6   b蓝色占5  -> 2字节
        //alpha
        //ARGB 4444    4 4 4 4  -> 2字节
        //ARGB 8888    -> 4字节
 
        //10 * 10 用rgb565 -> 10*10*2
 
        .bitmapConfig(Bitmap.Config.RGB_565)
        //加载时、加载错误时展示什么内容
        .showImageOnLoading(R.mipmap.ic_launcher)
        .showImageOnFail(R.mipmap.ic_launcher)
        //
        .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
        //加载效果
        //ctrl + p
        .displayer(new CircleBitmapDisplayer())
        .build();
 
    //ctrl + h
    //BitmapDisplayer;
    return displayImageOptions;
  }
 
​

Adapter多加了getItemViewType和getViewTypeCount()方法进行多条目加载

package adapter;

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

import com.bwie.xuexinxin.ImageloadConfigs;
import com.bwie.xuexinxin.MainActivity;
import com.bwie.xuexinxin.R;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;

import bean.News;

public class MAdapter extends BaseAdapter{
    private MainActivity mainActivity;
    private ArrayList<News.ResultBean.DataBean> list;

    public MAdapter(MainActivity mainActivity, ArrayList<News.ResultBean.DataBean> list) {
        this.mainActivity = mainActivity;
        this.list = list;
    }


    //当前item是什么类型
    @Override
    public int getItemViewType(int position) {
        News.ResultBean.DataBean data= (News.ResultBean.DataBean) getItem(position);
        //头条类型
        if(data.isTT()){
            return super.getItemViewType(position);
        }
        //国内类型
        if (data.isCN()) {
            return 1;
        }
        return 1;
    }

    @Override
    public int getViewTypeCount() {
        return super.getViewTypeCount()+1;
    }

   
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder vh=null;
        if(convertView==null){

            convertView=View.inflate(mainActivity,getItemViewType(position)==0?R.layout.tt_item:R.layout.gn_item,null);
           vh=new ViewHolder(convertView);

        } else {
            vh= (ViewHolder) convertView.getTag();
        }
        News.ResultBean.DataBean data= (News.ResultBean.DataBean) getItem(position);
        vh.bindData(data);
        return convertView;
    }
   
    @Override
    public int getCount() {

        return list.size();
    }

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

   
    @Override
    public long getItemId(int position) {
        return position;
    }
    public class ViewHolder {
        TextView title;
        TextView author;
        ImageView iv;

        public ViewHolder(View viewItem) {
            title=viewItem.findViewById(R.id.title);
            author=viewItem.findViewById(R.id.author);
            //国内
            iv=viewItem.findViewById(R.id.iv);
            viewItem.setTag(this);
        }
        public void bindData(News.ResultBean.DataBean data){
            title.setText(data.getTitle());
            author.setText(data.getAuthor_name());
            if(data.isCN()){
                ImageLoader.getInstance().displayImage(data.getThumbnail_pic_s(),iv, ImageloadConfigs.getOps(mainActivity));

            }

        }
    }


}

​

效果:

猜你喜欢

转载自blog.csdn.net/Xuexx_520/article/details/83027694