ViewPager+RadioGroup 实现网络加载图片的轮播
2016-11-30 12:03
375 查看
废话不多说 先上图 实现了轮播和定时播放 网络加载图片 实现了三级缓存
布局文件 (这里实现了radioGroup的动态添加radioButton)
<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.android_day18_viewpager02.MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<RadioGroup
android:id="@+id/rg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="30dp"
android:orientation="horizontal" >
</RadioGroup>
</RelativeLay>
部分核心代码如下:
Timer定时器 实现的图片定时播放
RadioGroup 的监听事件
根据添加图片的多少 动态添加RadioGroup的RadioButton
以上是主要的核心代码 有时间的猿们可以看看 如果急需代码 一下是所有的代码
MainActivity.java
MyAdapter.java 代码 适配器
网络请求 记载图片 这是使用的是异步任务加载
希望在技术的道路上 能于君共勉 越走越远
布局文件 (这里实现了radioGroup的动态添加radioButton)
<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.android_day18_viewpager02.MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<RadioGroup
android:id="@+id/rg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="30dp"
android:orientation="horizontal" >
</RadioGroup>
</RelativeLay>
部分核心代码如下:
Timer定时器 实现的图片定时播放
timer = new Timer(); /* * 1.被关闭过的timer 就不能使用他再次开启 * 2.TimerTask 用过了,就不能再用! * */ timer.schedule(new TimerTask() { @Override public void run() { // TODO Auto-generated method stub runOnUiThread(new Runnable() { // 主线程 @Override public void run() { // TODO Auto-generated method stub int currentItem = viewPager.getCurrentItem(); // 得到ViewPager当前显示第几页 int count = adapter.getCount(); // 总共有多少条 // 0123 4 if (currentItem == (count - 1)) { // 如果使用第二个参数,单条显示Fragment数据可能无法加载! viewPager.setCurrentItem(0); } else { currentItem++; viewPager.setCurrentItem(currentItem); } } }); } }, 2000, 2000);ViewPager的触摸监听
//触摸监听 viewPager.setOnTouchListener(new OnTouchListener() { /** * 参数1: ViewPager 调用者 * 参数2: 记录触摸的事件 包含: 触摸的xy 触摸的动作: down move up */ @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub // 获取触摸动作 int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: //按下 //停止定时器 timer.cancel(); //关闭 break; case MotionEvent.ACTION_UP: //抬起 //开启定时器 timer = new Timer(); //新创建一个对象 timer.schedule(new TimerTask() { @Override public void run() { // TODO Auto-generated method stub runOnUiThread(new Runnable() { // 主线程 @Override public void run() { // TODO Auto-generated method stub int currentItem = viewPager.getCurrentItem(); // 得到ViewPager当前显示第几页 int count = adapter.getCount(); // 总共有多少条 // 0123 4 if (currentItem == (count - 1)) { // 如果使用第二个参数,单条显示Fragment数据可能无法加载! viewPager.setCurrentItem(0); } else { currentItem++; viewPager.setCurrentItem(currentItem); } } }); } }, 2000, 2000); break; } return false; } });ViewPager的状态改变监听
viewPager.setOnPageChangeListener(new OnPageChangeListener() { //改变后是第几页 @Override public void onPageSelected(int arg0) { // TODO Auto-generated method stub ((RadioButton)rGroup.getChildAt(arg0)).setChecked(true); } //获取拉取偏移量 @Override public void onPageScrolled(int position, float arg1, int arg2) { // TODO Auto-generated method stub } //状态改变 @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } });
RadioGroup 的监听事件
//点击RadioButton 把ViewPager切换到当前的页面 rGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub //选中的是第几个RadioButton for (int i = 0; i < group.getChildCount(); i++) { //得到子控件 RadioButton button = (RadioButton) group.getChildAt(i); if (button.isChecked()) { //把选中的位置,设置为ViewPager显示的位置 viewPager.setCurrentItem(i); break; } } } });
根据添加图片的多少 动态添加RadioGroup的RadioButton
for (int i = 0; i < imageurls.length; i++) { //添加点 RadioButton button = new RadioButton(this); button.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); rGroup.addView(button); if (i==0) { button.setChecked(true); //第一个默认选中 } }适配器
@Override public View instantiateItem(ViewGroup container, int position) { // TODO Auto-generated method stub View ret = null; //创建一个视图 ImageView ImageView imageView = new ImageView(context); imageView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); imageView.setScaleType(ScaleType.FIT_XY); String url = images[position]; //取到网址 Bitmap bitmap = utils.getBitmap(url); //看下缓存中是否存在图片 if (bitmap == null) { //内存没有需要下载 imageView.setImageResource(R.drawable.ic_launcher); new ImageTask(imageView).execute(url); }else{ imageView.setImageBitmap(bitmap); } ret = imageView; //添加到容器中 container.addView(ret); return ret; }
以上是主要的核心代码 有时间的猿们可以看看 如果急需代码 一下是所有的代码
MainActivity.java
/*
* 带循环轮播的广告,并且底部有RadioGroup
*
* ViewPager显示
*
* 定时器
*
* RadioGroup显示联动
*
*/
public class MainActivity extends Activity {
private ViewPager viewPager;
private MyAdapter adapter;
private RadioGroup rGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewPager);
rGroup = (RadioGroup) findViewById(R.id.rg);
initRadioButton(); //往RadioGroup内部动态添加小点
initListener(); //初始化监听事件
adapter = new MyAdapter(imageurls, this);
viewPager.setAdapter(adapter);
timer = new Timer();
/*
* 1.被关闭过的timer 就不能使用他再次开启
* 2.TimerTask 用过了,就不能再用!
*
*/
timer.schedule(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
runOnUiThread(new Runnable() {
// 主线程
@Override
public void run() {
// TODO Auto-generated method stub
int currentItem = viewPager.getCurrentItem(); // 得到ViewPager当前显示第几页
int count = adapter.getCount(); // 总共有多少条
// 0123 4
if (currentItem == (count - 1)) {
// 如果使用第二个参数,单条显示Fragment数据可能无法加载!
viewPager.setCurrentItem(0);
} else {
currentItem++;
viewPager.setCurrentItem(currentItem);
}
}
});
}
}, 2000, 2000);
4000
//触摸监听 viewPager.setOnTouchListener(new OnTouchListener() { /** * 参数1: ViewPager 调用者 * 参数2: 记录触摸的事件 包含: 触摸的xy 触摸的动作: down move up */ @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub // 获取触摸动作 int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: //按下 //停止定时器 timer.cancel(); //关闭 break; case MotionEvent.ACTION_UP: //抬起 //开启定时器 timer = new Timer(); //新创建一个对象 timer.schedule(new TimerTask() { @Override public void run() { // TODO Auto-generated method stub runOnUiThread(new Runnable() { // 主线程 @Override public void run() { // TODO Auto-generated method stub int currentItem = viewPager.getCurrentItem(); // 得到ViewPager当前显示第几页 int count = adapter.getCount(); // 总共有多少条 // 0123 4 if (currentItem == (count - 1)) { // 如果使用第二个参数,单条显示Fragment数据可能无法加载! viewPager.setCurrentItem(0); } else { currentItem++; viewPager.setCurrentItem(currentItem); } } }); } }, 2000, 2000); break; } return false; } });}
private void initListener() {
// TODO Auto-generated method stub
viewPager.setOnPageChangeListener(new OnPageChangeListener() { //改变后是第几页 @Override public void onPageSelected(int arg0) { // TODO Auto-generated method stub ((RadioButton)rGroup.getChildAt(arg0)).setChecked(true); } //获取拉取偏移量 @Override public void onPageScrolled(int position, float arg1, int arg2) { // TODO Auto-generated method stub } //状态改变 @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } });
//点击RadioButton 把ViewPager切换到当前的页面 rGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub //选中的是第几个RadioButton for (int i = 0; i < group.getChildCount(); i++) { //得到子控件 RadioButton button = (RadioButton) group.getChildAt(i); if (button.isChecked()) { //把选中的位置,设置为ViewPager显示的位置 viewPager.setCurrentItem(i); break; } } } });
}
private void initRadioButton() {
// TODO Auto-generated method stub
for (int i = 0; i < imageurls.length; i++) {
//添加点
RadioButton button = new RadioButton(this);
button.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
rGroup.addView(button);
if (i==0) {
button.setChecked(true); //第一个默认选中
}
}
}
public String imageurls[] = new String[] {
"http://img.my.csdn.net/uploads/201407/26/1406383299_1976.jpg",
"http://img.my.csdn.net/uploads/201407/26/1406383291_6518.jpg",
"http://img.my.csdn.net/uploads/201407/26/1406383291_8239.jpg",
"http://img.my.csdn.net/uploads/201407/26/1406383290_9329.jpg",
"http://img.my.csdn.net/uploads/201407/26/1406383290_1042.jpg",
"http://img.my.csdn.net/uploads/201407/26/1406383275_3977.jpg",
"http://img.my.csdn.net/uploads/201407/26/1406383265_8550.jpg",
"http://img.my.csdn.net/uploads/201407/26/1406383264_3954.jpg",
"http://img.my.csdn.net/uploads/201407/26/1406383264_4787.jpg" };
private Timer timer;
}
MyAdapter.java 代码 适配器
/**
*
* ViewPager
*
* pagerAdapter
* FragmentPagerAdapter
* FragmentStateAdapter
*
* @author Administrator
*
*/
public class MyAdapter extends PagerAdapter{
private String [] images;
private Context context;
private LruCacheUtils utils;
public MyAdapter(String[] images, Context context) {
this.images = images;
this.context = context;
utils = LruCacheUtils.getInstance(); //得到缓存工具类
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return images != null?images.length:0;
}
/*
* 1.修改返回值
*
*
*/
@Override public View instantiateItem(ViewGroup container, int position) { // TODO Auto-generated method stub View ret = null; //创建一个视图 ImageView ImageView imageView = new ImageView(context); imageView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); imageView.setScaleType(ScaleType.FIT_XY); String url = images[position]; //取到网址 Bitmap bitmap = utils.getBitmap(url); //看下缓存中是否存在图片 if (bitmap == null) { //内存没有需要下载 imageView.setImageResource(R.drawable.ic_launcher); new ImageTask(imageView).execute(url); }else{ imageView.setImageBitmap(bitmap); } ret = imageView; //添加到容器中 container.addView(ret); return ret; }
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
/**
* 1.去掉 super
* 2.
*
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
if (object instanceof View) {
View view = (View) object;
container.removeView(view); //移除
}
}
网络请求 记载图片 这是使用的是异步任务加载
//异步任务 class ImageTask extends AsyncTask<String, Void, Bitmap>{ private ImageView imageView; public ImageTask(ImageView imageView) { this.imageView = imageView; } @Override protected Bitmap doInBackground(String... params) { // TODO Auto-generated method stub try { URL url = new URL(params[0]); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); if (connection.getResponseCode() == 200) { InputStream inputStream = connection.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); //保存一份 utils.putBitmap(params[0], bitmap); return bitmap; } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override protected void onPostExecute(Bitmap result) { // TODO Auto-generated method stub super.onPostExecute(result); if (result != null) { imageView.setImageBitmap(result); } } }图片显示的不是很全, 这里使用了LruCache进行图片的缓存处理,使图片加载的更加顺溜《这是使用了三级缓存》
/**以上就是全部代码 希望能帮助到大家, 一起学习
*
* ViewPager
*
* pagerAdapter
* FragmentPagerAdapter
* FragmentStateAdapter
*
* @author Administrator
*
*/
public class MyAdapter extends PagerAdapter{
private String [] images;
private Context context;
private LruCacheUtils utils;
public MyAdapter(String[] images, Context context) {
this.images = images;
this.context = context;
utils = LruCacheUtils.getInstance(); //得到缓存工具类
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return images != null?images.length:0;
}
/*
* 1.修改返回值
*
*
*/
@Override public View instantiateItem(ViewGroup container, int position) { // TODO Auto-generated method stub View ret = null; //创建一个视图 ImageView ImageView imageView = new ImageView(context); imageView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); imageView.setScaleType(ScaleType.FIT_XY); String url = images[position]; //取到网址 Bitmap bitmap = utils.getBitmap(url); //看下缓存中是否存在图片 if (bitmap == null) { //内存没有需要下载 imageView.setImageResource(R.drawable.ic_launcher); new ImageTask(imageView).execute(url); }else{ imageView.setImageBitmap(bitmap); } ret = imageView; //添加到容器中 container.addView(ret); return ret; }
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
/**
* 1.去掉 super
* 2.
*
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
if (object instanceof View) {
View view = (View) object;
container.removeView(view); //移除
}
}
//异步任务
class ImageTask extends AsyncTask<String, Void, Bitmap>{
private ImageView imageView;
public ImageTask(ImageView imageView) {
this.imageView = imageView;
}
@Override
protected Bitmap doInBackground(String... params) {
// TODO Auto-generated method stub
try {
URL url = new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
if (connection.getResponseCode() == 200) {
InputStream inputStream = connection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
//保存一份
utils.putBitmap(params[0], bitmap);
return bitmap;
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if (result != null) {
imageView.setImageBitmap(result);
}
}
}
希望在技术的道路上 能于君共勉 越走越远
相关文章推荐
- ViewPager网络加载图片并无限轮播实现
- android的ViewPager实现加载网络图片并自动轮播
- ViewPage+Volley实现动态加载网络图片广告轮播 !
- <八>RecycleView+CardView实现瀑布流(2、加载网络图片)
- 使用自定义的item、Adapter和AsyncTask、第三方开源框架PullToRefresh联合使用实现自定义的下拉列表(从网络加载图片显示在item中的ImageView)
- android viewPager网络加载图片无限自动轮播
- android ViewPager实现的轮播图广告自定义视图,网络获取图片和数据
- ViewPager实现加载网络图片,动态添加删除效果
- SmartImageView重新实现网络图片的加载
- 自定义ImageView实现类似微信朋友圈发图片点击出来阴影效果;同时使用Picasso加载网络图片
- Android--自定义View加载网络图片,实现缩放,圆形剪裁
- ListView、RecyclerView CheckBox 单选实现,以及RecyclerView异步加载网络图片
- <八>RecycleView+CardView实现瀑布流(2、加载网络图片)
- 网络判断+xlistview上拉加载、下拉刷新+Tablayout +图片拖拽缩放+数据库存储 3、案例完成思路要求: 模块一:用fragment+viewpager+Tablayout实现页面
- 用RecyclerView实现新闻列表页,包括头部的图片轮播,两种Item显示方式,下拉刷新和上拉加载以及限制列表的加载条目数
- 利用webView实现加载网络图片居中并适应手机屏幕,以及img设置前缀
- 用viewpager实现网络图片的加载并滑动
- 使用自定义的item、Adapter和AsyncTask、第三方开源框架PullToRefresh联合使用实现自定义的下拉列表(从网络加载图片显示在item中的ImageView)
- 使用FlaycoBanner实现图片轮播效果(加载网络图片)
- 使用universalimageloader实现viewpager加载网络图片轮显