Volley+ViewPager加载网络图片

                在项目中遇到一个问题,需要使用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即可使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值