用xutils或imageloader加载网络图片实现轮播效果
2015-09-21 22:38
686 查看
图片轮播效果几乎是每款app的必备,作为一名app开发人员必须熟练掌握这种效果的实现。本地加载图片的实现方式,比较简单,这里就不在叙述,主要讲从网络加载图片实现轮播效果。先上效果图。
之前看到过许多应用的轮播效果实现,非常之复杂,首先异步加载网络图片,并对加载的图片进行本地化存储,在本地化存储的同时并在内存中进行存储,图片过大的话,还要对图片进行压缩处理,防止OOM。。。而xutils和imageloader的出现,这些问题就变的简单,如imageloader实现这种效果,如果进行本地存储只需配置参数cacheOnDisc(true),内存缓存只需配置参数cacheInMemory(true)等等。。
这里我给出两种实现方式,一种是用Xutils,一种用imageloader。而指示点我们用开源框架ViewPageIndicatorLibrary(这里以图片网络图片加载为主,此开源框架的应用就不在介绍)。
代码比较简单:直接贴出:
1.用imageloader实现
package com.example.viewpager2;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ImageView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.viewpagerindicator.CirclePageIndicator;
public class MainActivity extends Activity {
String url1="http://p0.so.qhimg.com/bdr/_240_/t01ad3641a09574b2f5.jpg";
String url2="http://p0.so.qhimg.com/bdr/_240_/t01a3f05c605b07d5d5.jpg";
String url3="http://p2.so.qhimg.com/bdr/_240_/t0126b04b6e0a3fccb7.jpg";
String url4="http://p1.so.qhimg.com/bdr/_240_/t01baab02b231be535b.jpg";
String url5="http://p0.so.qhimg.com/bdr/_240_/t01c5ad4f3a5cf97185.jpg";
String url6="http://p0.so.qhimg.com/bdr/_240_/t0141df88740d0e417f.jpg";
String url[]={url1,url2,url3,url4,url5,url6};
private ViewPager viewpager;
CirclePageIndicator mIndicator;
Mypageradapter mypageradapter;
Handler handler=new Handler(){
public void handleMessage(android.os.Message msg) {
int currentItem = viewpager.getCurrentItem();
if(currentItem<mypageradapter.getCount()-1){
currentItem++;
}else{
currentItem=0;
}
viewpager.setCurrentItem(currentItem);
handler.sendEmptyMessageDelayed(0, 3000);
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(MainActivity.this);
ImageLoader.getInstance().init(configuration);
viewpager=(ViewPager) findViewById(R.id.pager);
mIndicator=(CirclePageIndicator) findViewById(R.id.indicator);
mypageradapter=new Mypageradapter();
viewpager.setAdapter(mypageradapter);
mIndicator.setViewPager(viewpager);
handler.sendEmptyMessageDelayed(0, 3000);
}
class Mypageradapter extends PagerAdapter{
public Mypageradapter() {
}
@Override
public int getCount() {
return url.length;
}
@Override
public boolean isViewFromObject(View view, Object obj) {
return view==obj;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView=new ImageView(MainActivity.this);
container.addView(imageView);
DisplayImageOptions options=new DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisc(true).build();
ImageLoader.getInstance().displayImage(url[position], imageView,options);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
2.用xutils实现:
package com.example.viewpagere;
import com.lidroid.xutils.BitmapUtils;
import com.viewpagerindicator.CirclePageIndicator;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ImageView;
public class MainActivity extends Activity {
String url1="http://p0.so.qhimg.com/bdr/_240_/t01ad3641a09574b2f5.jpg";
String url2="http://p0.so.qhimg.com/bdr/_240_/t01a3f05c605b07d5d5.jpg";
String url3="http://p2.so.qhimg.com/bdr/_240_/t0126b04b6e0a3fccb7.jpg";
String url4="http://p1.so.qhimg.com/bdr/_240_/t01baab02b231be535b.jpg";
String url5="http://p0.so.qhimg.com/bdr/_240_/t01c5ad4f3a5cf97185.jpg";
String url6="http://p0.so.qhimg.com/bdr/_240_/t0141df88740d0e417f.jpg";
String url[]={url1,url2,url3,url4,url5,url6};
private ViewPager view_pager;
CirclePageIndicator mIndicator;
Mypageradapter mypageradapter;
Handler handler=new Handler(){
public void handleMessage(android.os.Message msg) {
int currentItem = view_pager.getCurrentItem();
if(currentItem<mypageradapter.getCount()-1){
currentItem++;
}else{
currentItem=0;
}
view_pager.setCurrentItem(currentItem);
handler.sendEmptyMessageDelayed(0, 3000);
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
view_pager=(ViewPager) findViewById(R.id.pager);
mypageradapter=new Mypageradapter();
view_pager.setAdapter(mypageradapter);
mIndicator=(CirclePageIndicator) findViewById(R.id.indicator);
mIndicator.setViewPager(view_pager);
handler.sendEmptyMessageDelayed(0, 3000);
}
class Mypageradapter extends PagerAdapter{
BitmapUtils bitmapUtils;
public Mypageradapter() {
bitmapUtils=new BitmapUtils(MainActivity.this);
}
@Override
public int getCount() {
return url.length;
}
@Override
public boolean isViewFromObject(View view, Object obj) {
return view==obj;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView=new ImageView(MainActivity.this);
container.addView(imageView);
bitmapUtils.display(imageView, url[position]);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
代码下载地址:https://github.com/kelvinnint/Asyncviewpager
之前看到过许多应用的轮播效果实现,非常之复杂,首先异步加载网络图片,并对加载的图片进行本地化存储,在本地化存储的同时并在内存中进行存储,图片过大的话,还要对图片进行压缩处理,防止OOM。。。而xutils和imageloader的出现,这些问题就变的简单,如imageloader实现这种效果,如果进行本地存储只需配置参数cacheOnDisc(true),内存缓存只需配置参数cacheInMemory(true)等等。。
这里我给出两种实现方式,一种是用Xutils,一种用imageloader。而指示点我们用开源框架ViewPageIndicatorLibrary(这里以图片网络图片加载为主,此开源框架的应用就不在介绍)。
代码比较简单:直接贴出:
1.用imageloader实现
package com.example.viewpager2;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ImageView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.viewpagerindicator.CirclePageIndicator;
public class MainActivity extends Activity {
String url1="http://p0.so.qhimg.com/bdr/_240_/t01ad3641a09574b2f5.jpg";
String url2="http://p0.so.qhimg.com/bdr/_240_/t01a3f05c605b07d5d5.jpg";
String url3="http://p2.so.qhimg.com/bdr/_240_/t0126b04b6e0a3fccb7.jpg";
String url4="http://p1.so.qhimg.com/bdr/_240_/t01baab02b231be535b.jpg";
String url5="http://p0.so.qhimg.com/bdr/_240_/t01c5ad4f3a5cf97185.jpg";
String url6="http://p0.so.qhimg.com/bdr/_240_/t0141df88740d0e417f.jpg";
String url[]={url1,url2,url3,url4,url5,url6};
private ViewPager viewpager;
CirclePageIndicator mIndicator;
Mypageradapter mypageradapter;
Handler handler=new Handler(){
public void handleMessage(android.os.Message msg) {
int currentItem = viewpager.getCurrentItem();
if(currentItem<mypageradapter.getCount()-1){
currentItem++;
}else{
currentItem=0;
}
viewpager.setCurrentItem(currentItem);
handler.sendEmptyMessageDelayed(0, 3000);
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(MainActivity.this);
ImageLoader.getInstance().init(configuration);
viewpager=(ViewPager) findViewById(R.id.pager);
mIndicator=(CirclePageIndicator) findViewById(R.id.indicator);
mypageradapter=new Mypageradapter();
viewpager.setAdapter(mypageradapter);
mIndicator.setViewPager(viewpager);
handler.sendEmptyMessageDelayed(0, 3000);
}
class Mypageradapter extends PagerAdapter{
public Mypageradapter() {
}
@Override
public int getCount() {
return url.length;
}
@Override
public boolean isViewFromObject(View view, Object obj) {
return view==obj;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView=new ImageView(MainActivity.this);
container.addView(imageView);
DisplayImageOptions options=new DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisc(true).build();
ImageLoader.getInstance().displayImage(url[position], imageView,options);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
2.用xutils实现:
package com.example.viewpagere;
import com.lidroid.xutils.BitmapUtils;
import com.viewpagerindicator.CirclePageIndicator;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ImageView;
public class MainActivity extends Activity {
String url1="http://p0.so.qhimg.com/bdr/_240_/t01ad3641a09574b2f5.jpg";
String url2="http://p0.so.qhimg.com/bdr/_240_/t01a3f05c605b07d5d5.jpg";
String url3="http://p2.so.qhimg.com/bdr/_240_/t0126b04b6e0a3fccb7.jpg";
String url4="http://p1.so.qhimg.com/bdr/_240_/t01baab02b231be535b.jpg";
String url5="http://p0.so.qhimg.com/bdr/_240_/t01c5ad4f3a5cf97185.jpg";
String url6="http://p0.so.qhimg.com/bdr/_240_/t0141df88740d0e417f.jpg";
String url[]={url1,url2,url3,url4,url5,url6};
private ViewPager view_pager;
CirclePageIndicator mIndicator;
Mypageradapter mypageradapter;
Handler handler=new Handler(){
public void handleMessage(android.os.Message msg) {
int currentItem = view_pager.getCurrentItem();
if(currentItem<mypageradapter.getCount()-1){
currentItem++;
}else{
currentItem=0;
}
view_pager.setCurrentItem(currentItem);
handler.sendEmptyMessageDelayed(0, 3000);
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
view_pager=(ViewPager) findViewById(R.id.pager);
mypageradapter=new Mypageradapter();
view_pager.setAdapter(mypageradapter);
mIndicator=(CirclePageIndicator) findViewById(R.id.indicator);
mIndicator.setViewPager(view_pager);
handler.sendEmptyMessageDelayed(0, 3000);
}
class Mypageradapter extends PagerAdapter{
BitmapUtils bitmapUtils;
public Mypageradapter() {
bitmapUtils=new BitmapUtils(MainActivity.this);
}
@Override
public int getCount() {
return url.length;
}
@Override
public boolean isViewFromObject(View view, Object obj) {
return view==obj;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView=new ImageView(MainActivity.this);
container.addView(imageView);
bitmapUtils.display(imageView, url[position]);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
代码下载地址:https://github.com/kelvinnint/Asyncviewpager
相关文章推荐
- 把https网站中的安全证书导入到java中的cacerts证书库
- 2015 ACM/ICPC 沈阳赛区网络赛 1010.Jesus Is Here (HDOJ5459)
- 2015年ACM北京网络赛 B题Mission Impossible 6-链表模拟
- 北京赛区(2015)网络赛The Cats' Feeding Spots
- 获取网络时间
- AFNetworking https自签名证书 -1012 解决方案
- Xcode7 网络请求报错:The resource could not be loaded because
- BP神经网络及matlab实现
- 《计算机网络》总结
- 2015北京赛区网络赛 Boxes
- /etc/profile和 . profile 文件 http://blog.csdn.net/louiswang2009/article/details/5886575
- hdu5461(2015沈阳网络赛L题)
- main函数调用、进程终止以及命令行参数和环境表http://www.tuicool.com/articles/FNnMNr
- UNIX环境编程学习笔记(16)——进程管理之进程环境变量 http://www.cnblogs.com/lienhua34/p/4005367.html
- hdu5452(2015沈阳网络赛C题)
- hdu5455(2015沈阳网络赛F题)
- hdu5459(2015沈阳网络赛J题)
- 农村借贷会是网络巨头的下一个角斗场吗?
- TCP客户/服务器程序示例
- iOS9 HTTP 不能正常使用的解决办法