Android 开发中PullToRefreshScrollView上拉刷新,Banner实现无限轮播
来源:互联网 发布:puppy linux 中文包 编辑:程序博客网 时间:2024/06/05 20:28
MainActivity:
package com.example.pulltorefreshview;import android.os.AsyncTask;import android.os.Bundle;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ScrollView;import android.widget.TextView;import com.google.gson.Gson;import com.handmark.pulltorefresh.library.ILoadingLayout;import com.handmark.pulltorefresh.library.PullToRefreshBase;import com.handmark.pulltorefresh.library.PullToRefreshScrollView;import com.nostra13.universalimageloader.core.ImageLoader;import com.youth.banner.Banner;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private PullToRefreshScrollView pull_rs; private MyListview lv; private StringBuilder builder; int index = 1; int type = 1; List<Bean.DataBean> list = new ArrayList<>(); private MyAdapter adapter; private List<String> list2; private Banner banner; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pull_rs = (PullToRefreshScrollView) findViewById(R.id.pull_rs); banner = (Banner) findViewById(R.id.banner); lv = (MyListview) findViewById(R.id.lv); intRefreshScrollView(); init(); } public void init() { Mytask mytask = new Mytask(); mytask.execute("http://api.expoon.com/AppNews/getNewsList/type/1/p/1"); } private void addToTop() { type = 1; Mytask mytask = new Mytask(); mytask.execute("http://api.expoon.com/AppNews/getNewsList/type/1/p/1"); } private void addToBottom() { type = 2; index++; Mytask mytask = new Mytask(); mytask.execute("http://api.expoon.com/AppNews/getNewsList/type/1/p/" + index); } public void setAdapter() { if (adapter == null) { adapter = new MyAdapter(); lv.setAdapter(adapter); } else { adapter.notifyDataSetChanged(); } } private void intRefreshScrollView() { //1.设置模式 pull_rs.setMode(PullToRefreshBase.Mode.BOTH); //2.通过调用getLoadingLayoutProxy方法,设置下拉刷新状况布局中显示的文字 ,第一个参数为true,代表下拉刷新 ILoadingLayout headLables = pull_rs.getLoadingLayoutProxy(true, false); headLables.setPullLabel("下拉刷新"); headLables.setRefreshingLabel("正在刷新"); headLables.setReleaseLabel("松开刷新"); //2.设置上拉加载底部视图中显示的文字,第一个参数为false,代表上拉加载更多 ILoadingLayout footerLables = pull_rs.getLoadingLayoutProxy(false, true); footerLables.setPullLabel("上拉加载"); footerLables.setRefreshingLabel("正在载入..."); footerLables.setReleaseLabel("松开加载更多"); //3.设置监听事件 pull_rs.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) { addToTop();//请求网络数据,并更新listview组件 refreshComplete();//数据加载完成后,关闭header,footer } @Override public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) { addToBottom();//请求网络数据,并更新listview组件 refreshComplete();//数据加载完成后,关闭header,footer } }); } /** * 刷新完成时关闭 */ public void refreshComplete() { new Handler().postDelayed(new Runnable() { @Override public void run() { pull_rs.onRefreshComplete(); } }, 1000); } class Mytask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... strings) { try { //获取url URL url = new URL(strings[0]); //请求网络 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); int code = urlConnection.getResponseCode(); //判断是否返回成功 if (code == 200) { //获取网络信息 InputStream inputStream = urlConnection.getInputStream(); BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream)); builder = new StringBuilder(); String s = ""; //拼接 while ((s = bf.readLine()) != null) { builder.append(s); } } } catch (Exception e) { e.printStackTrace(); } return builder.toString(); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Gson gson = new Gson(); Bean json = gson.fromJson(s, Bean.class); if (type == 1) { list.clear(); list.addAll(json.getData()); } else { list.addAll(json.getData()); } Log.d("zzz", list.toString()); //设置banner样式 // banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE); //设置图片加载器 list2 = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { list2.add(list.get(i).getPic_url()); } banner.setImageLoader(new MyImagloder()); //设置图片集合 banner.setImages(list2); //设置banner动画效果 //banner.setBannerAnimation(Transformer.RotateDown); //设置标题集合(当banner样式有显示title时) //banner.setBannerTitles(imageTitle); //设置轮播时间 banner.setDelayTime(1500); //设置指示器位置(当banner模式中有指示器时) //banner.setIndicatorGravity(BannerConfig.CENTER); //banner设置方法全部调用完毕时最后调用 banner.start(); setAdapter(); } } class MyAdapter extends BaseAdapter { @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { Viewholder vh; if (convertView == null) { vh = new Viewholder(); convertView = View.inflate(MainActivity.this, R.layout.item, null); vh.img = (ImageView) convertView.findViewById(R.id.imageView); vh.tv = (TextView) convertView.findViewById(R.id.textView); convertView.setTag(vh); } else { vh = (Viewholder) convertView.getTag(); } vh.tv.setText(list.get(position).getNews_title()); ImageLoader.getInstance().displayImage(list.get(position).getPic_url(), vh.img); return convertView; } } public static class Viewholder { ImageView img; TextView tv; }}MyImagloder:package com.example.pulltorefreshview;import android.content.Context;import android.widget.ImageView;import com.youth.banner.loader.ImageLoader;/** * Created by Earl on 2017/10/25. */public class MyImagloder extends ImageLoader { @Override public void displayImage(Context context, Object path, ImageView imageView) { //得到ImageLoader的实例 com.nostra13.universalimageloader.core.ImageLoader instance = com.nostra13.universalimageloader.core.ImageLoader.getInstance(); //通过ImageLoader设置图片 instance.displayImage((String) path, imageView); }}Mapp:
package com.example.pulltorefreshview;import android.app.Application;import android.graphics.Bitmap;import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import java.io.File;/** * Created by Earl on 2017/10/25. */public class Mapp extends Application { public void onCreate() { super.onCreate(); File cacheFile=getExternalCacheDir(); ImageLoaderConfiguration config=new ImageLoaderConfiguration.Builder(this) .memoryCacheExtraOptions(480, 800)//缓存图片最大的长和宽 .threadPoolSize(2)//线程池的数量 .threadPriority(4) .memoryCacheSize(2*1024*1024)//设置内存缓存区大小 .diskCacheSize(20*1024*1024)//设置sd卡缓存区大小 .writeDebugLogs()//打印日志内容 .diskCacheFileNameGenerator(new Md5FileNameGenerator())//给缓存的文件名进行md5加密处理 .build(); ImageLoader.getInstance().init(config); } public static DisplayImageOptions getImageOptions(){ DisplayImageOptions optionsoptions=new DisplayImageOptions.Builder() .cacheInMemory(true)//使用内存缓存 .cacheOnDisk(true)//使用磁盘缓存 .bitmapConfig(Bitmap.Config.RGB_565)//设置图片格式 .build(); return optionsoptions; }}Bean:
package com.example.pulltorefreshview;import java.util.List;/** * Created by Earl on 2017/10/25. */public class Bean { private int status; private String info; private List<DataBean> data; public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { private String news_id; private String news_title; private String news_summary; private String pic_url; public String getNews_id() { return news_id; } public void setNews_id(String news_id) { this.news_id = news_id; } public String getNews_title() { return news_title; } public void setNews_title(String news_title) { this.news_title = news_title; } public String getNews_summary() { return news_summary; } public void setNews_summary(String news_summary) { this.news_summary = news_summary; } public String getPic_url() { return pic_url; } public void setPic_url(String pic_url) { this.pic_url = pic_url; } }}MyListview:
package com.example.pulltorefreshview;import android.content.Context;import android.util.AttributeSet;import android.widget.ListView;/** * Created by Earl on 2017/10/24. */public class MyListview extends ListView{ public MyListview(Context context) { super(context); } public MyListview(Context context, AttributeSet attrs) { super(context, attrs); } public MyListview(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); }}activity_main.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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" tools:context="com.example.pulltorefreshview.MainActivity"> <com.handmark.pulltorefresh.library.PullToRefreshScrollView android:id="@+id/pull_rs" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.youth.banner.Banner android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="200dp"></com.youth.banner.Banner> <com.example.pulltorefreshview.MyListview android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent"></com.example.pulltorefreshview.MyListview> </LinearLayout> </com.handmark.pulltorefresh.library.PullToRefreshScrollView></RelativeLayout>item.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:layout_width="90dp" android:layout_height="90dp" android:id="@+id/imageView" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView" android:textSize="20sp"/></LinearLayout>compile 'com.youth.banner:banner:1.4.9'
阅读全文
0 0
- Android 开发中PullToRefreshScrollView上拉刷新,Banner实现无限轮播
- Android 开发中 用Banner实现无限(自动)轮播
- banner实现无限轮播+下拉刷新上拉加载+ 下拉时 listview 和轮播图一起刷新
- Android 中ViewPager 实现banner无限轮播效果
- PullToFreshListView上拉刷新 + banner轮播+侧拉
- Android开发中Banner部分实现真正的无限轮播
- Android开发中实现pulltorefresh刷新,banner实现无线轮播
- banner控件实现无线轮播+PullToRefreshScrollView 轮播图和listview跟着一起刷新
- android 上拉下拉刷新和banner轮播广告条 Github 项推荐
- banner实现无限轮播
- Banner实现无限轮播
- Banner实现无限轮播
- banner实现无限轮播
- Android自定义控件--无限轮播Banner和Indicator实现
- Banner实现广告无限轮播
- 利用banner实现图片无限轮播,
- Banner无限轮播
- Banner无限轮播
- jQuery使用ajaxSubmit()提交表单
- 解决中文乱码(Util)
- maven详解-(6)聚合
- 简明Python教程笔记三 python3.x
- 题目:SQL编程题 三、SQL编程题 员工表emp:员工编号eid,姓名ename,工作职位title,雇佣日期hiretime,工资salary,奖金bonus,部门 depart 部门表dept
- Android 开发中PullToRefreshScrollView上拉刷新,Banner实现无限轮播
- == 和 equals小记
- VS2017常用快捷键设定,Java派的可以自己定义
- 20171025日记账流水
- zookeeper在dubbo到底起了什么作用,dubno如何解决了阿里的高并发问题?
- Spring的面向切面编程AOP
- 做题反思
- 【two-pointer】Codeforces762C[Two strings]题解
- CentOS 6.6 升级GCC G