ViewPager实现加载网络图片,动态添加删除效果

本文介绍如何在Android中使用ViewPager加载网络图片,并实现动态添加、删除页面的功能,同时具备图片缓存机制。参考链接提供详细代码及注释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本例实现从网络加载图片,动态添加删除ViewPager中页面,图片缓存功能。

直接上代码,重点都写注释里了。

记得权限加网络连接。

懒得上图。

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.util.LruCache;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.Volley;

import java.util.ArrayList;

/**
 * @author PhxNirvana
 */

public class MainActivity extends Activity {
    ViewPager viewPager;
    Button addBtn;
    Button delBtn;
    String[] url = new String[] {
            "https://img-my.youkuaiyun.com/uploads/201407/17/1405567749_8669.jpg",
            "",
            "http://avatar.youkuaiyun.com/blogpic/20140903135550859.jpg"
            };
    String[] drawable = new String[] {};
    private final static int MAX_NUM = 3;
    RequestQueue mQueue;
    ArrayList<View> views;
    PagerAdapter pagerAdapter;
    ImageLoader imageLoader;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        addBtn = (Button) findViewById(R.id.addBtn);
        delBtn = (Button) findViewById(R.id.delBtn);
        //Volley请求队列
        mQueue = Volley.newRequestQueue(this);

        imageLoader = new ImageLoader(mQueue, new BitmapCache());

        initViews();

        addBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LinearLayout linearLayout = new LinearLayout(MainActivity.this);
                //这里使用Volley的NetworkImageView显示图片
                NetworkImageView imageView = new NetworkImageView(MainActivity.this);
                //加载图片url
                imageView.setImageUrl(url[0], imageLoader);
                //加载前显示图片
                imageView.setDefaultImageResId(R.drawable.asus_image_login_01);
                //加载失败显示图片
                imageView.setErrorImageResId(R.drawable.asus_image_login_02);
                LinearLayout.LayoutParams tv_params = new LinearLayout.LayoutParams(
                        ViewGroup.LayoutParams.MATCH_PARENT,
                        ViewGroup.LayoutParams.MATCH_PARENT);
                linearLayout.setOrientation(LinearLayout.VERTICAL);

                linearLayout.addView(imageView, tv_params);
                views.add(linearLayout);
                pagerAdapter.notifyDataSetChanged();
            }
        });

        delBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (views.size() > 0) {
                    views.remove(views.size() - 1);
                    pagerAdapter.notifyDataSetChanged();
                }
            }
        });

    }

    private void initViews() {
        views = new ArrayList<>();

        for (int i = 0; i < MAX_NUM; i++) {
            LinearLayout linearLayout = new LinearLayout(this);

            NetworkImageView imageView = new NetworkImageView(this);
            imageView.setImageUrl(url[i], imageLoader);
            imageView.setDefaultImageResId(R.drawable.asus_image_login_01);
            imageView.setErrorImageResId(R.drawable.asus_image_login_02);
            LinearLayout.LayoutParams tv_params = new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT);
            linearLayout.setOrientation(LinearLayout.VERTICAL);

            linearLayout.addView(imageView, tv_params);
            views.add(linearLayout);
        }

        pagerAdapter = new PagerAdapter() {
            @Override
            public int getCount() {
                return views.size();
            }

            @Override
            public boolean isViewFromObject(View view, Object object) {
                return view == object;
            }

            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                Log.d("destroyItem", position + "");
                //这里需要强制转换类型
                (container).removeView((View) object);
            }

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                container.addView(views.get(position));
                return views.get(position);
            }

            @Override
            public int getItemPosition(Object object) {
                //刷新视图
                return POSITION_NONE;
            }
        };
        viewPager.setAdapter(pagerAdapter);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            @Override
            public void onPageSelected(int position) {
            }

            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
    }

    //图片缓存
    public class BitmapCache implements ImageLoader.ImageCache {
        private LruCache<String, Bitmap> mCache;
        public BitmapCache() {
            int maxSize = 10 * 1024 * 1024;
            mCache = new LruCache<String, Bitmap> (maxSize) {
                @Override
                protected int sizeOf(String key, Bitmap bitmap) {
                    return bitmap.getRowBytes() * bitmap.getHeight();
                }
            };
        }
        @Override
        public Bitmap getBitmap(String url) {
            return mCache.get(url);
        }

        @Override
        public void putBitmap(String url, Bitmap bitmap) {
            mCache.put(url, bitmap);
        }
    }
}

参考资料:

http://blog.youkuaiyun.com/guolin_blog/article/details/17482165

http://blog.sina.com.cn/s/blog_7607703f0101a7t0.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值