本例实现从网络加载图片,动态添加删除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