在项目中遇到一个问题,需要使用ViewPager的形式来显示几张网络图片,当时考虑用Volley可不可以实现,结果果然可以,效果还不错,效果图如下:
我加载了三张图片,可以根据自己的具体需要增减,下面是具体实现代码:
1.xml布局页面
<LinearLayout 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"
android:orientation="vertical"
android:background="@color/background"
tools:context="com.***.***.***.ShowCarParamActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@mipmap/title_background" >
<LinearLayout
android:id="@+id/car_param_back"
android:layout_width="60dp"
android:layout_height="match_parent"
android:gravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/back_select"/>
</LinearLayout>
</RelativeLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v4.view.ViewPager
android:id="@+id/image_pager"
android:layout_width="match_parent"
android:layout_height="400dp"/>
<span style="white-space:pre"> </span><!--用来显示代表图片数量和当前图片的小圆点-->
<LinearLayout
android:id="@+id/viewgroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal"
android:layout_gravity="bottom|center_horizontal"
android:layout_marginBottom="20dp"/>
</FrameLayout>
</LinearLayout>
2.具体实现代码
import android.graphics.Bitmap;
import android.media.Image;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.util.LruCache;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;
public class ShowCarParamActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener{
private static final String TAG = "ShowCarActivity";
private LinearLayout car_param_back; //返回按钮
private ViewGroup viewgroup; //用来存放小圆点的group
private ViewPager image_pager;
private ImageView[] tips; //滑动点点数组
private ImageView[] mImageviews; //存放显示的imageview的数组
private int[] imgIdArray; //图片资源数组
RequestQueue requestQueue; Volley请求队列
ImageLoader imageLoader;
ImageLoader.ImageListener imageListener;
//数组中URL1,2,3代表网络图片的地址,网上很多,谁便找几个就行了
private String[] url = {"url1","url2","url3"};
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_car_param);
init();
registerOnclick();
image_pager.setAdapter(new MyPageAdapter());
image_pager.setOnPageChangeListener(this);
imageLoader = new ImageLoader(requestQueue,new BitmapCache());
}
private void init(){
car_param_back = (LinearLayout) findViewById(R.id.car_param_back);
viewgroup = (ViewGroup) findViewById(R.id.viewgroup);
image_pager = (ViewPager) findViewById(R.id.image_pager);
//实例化volley请求队列
requestQueue = Volley.newRequestQueue(ShowCarParamActivity.this);
//把小圆点添加到viewgroup中
tips = new ImageView[3];
for(int i=0 ; i<tips.length ; i++){
ImageView imageView = new ImageView(ShowCarParamActivity.this);
imageView.setLayoutParams(new ViewGroup.LayoutParams(10,10));
tips[i] = imageView;
if(i == 0){
imageView.setBackgroundResource(R.mipmap.indicator_checked);
}else{
imageView.setBackgroundResource(R.mipmap.indicator_unchecked);
}
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
layoutParams.leftMargin = 5;
layoutParams.rightMargin = 5;
viewgroup.addView(imageView,layoutParams);
}
mImageviews = new ImageView[3];
for(int i=0 ; i<mImageviews.length ; i++){
ImageView imageView = new ImageView(ShowCarParamActivity.this);
mImageviews[i] = imageView;
}
}
private void registerOnclick(){
car_param_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
//设置选中和未选中小圆点的背景
private void setTipsImageBackground(int selectItems){
for(int i=0 ;i<tips.length ; i++){
if(i == selectItems){
tips[i].setBackgroundResource(R.mipmap.indicator_checked);
}else{
tips[i].setBackgroundResource(R.mipmap.indicator_unchecked);
}
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
setTipsImageBackground(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
private class MyPageAdapter extends PagerAdapter{
@Override
public int getCount() {
return 3;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
//根据当前滑动的位置加载对应的图片
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(mImageviews[position]);
if(position == 0){
//getImageListener三个参数分别为:显示图片的控件、加载过程中显示的图片、加载失败显示的图片
imageListener = ImageLoader.getImageListener(mImageviews[position],R.mipmap.image_load,R.mipmap.image_load_fail);
imageLoader.get(url[position],imageListener);
}else if(position == 1){
imageListener = ImageLoader.getImageListener(mImageviews[position],R.mipmap.image_load,R.mipmap.image_load_fail);
imageLoader.get(url[position],imageListener);
}else if(position == 2){
imageListener = ImageLoader.getImageListener(mImageviews[position],R.mipmap.image_load,R.mipmap.image_load_fail);
imageLoader.get(url[position],imageListener);
}
return mImageviews[position];
}
}
private class BitmapCache implements ImageLoader.ImageCache{
private LruCache<String,Bitmap> mCache;
public BitmapCache(){
int maxSize = 10*1024*1024; //将缓存图片的大小设置为10M
mCache = new LruCache<String,Bitmap>(maxSize){
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes()*value.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String s) {
return mCache.get(s);
}
@Override
public void putBitmap(String s, Bitmap bitmap) {
mCache.put(s, bitmap);
}
}
}
3.volley的jar包网上到处都是,下载后放到libs文件夹,然后右键这个jar包-->Add As Library即可使用