转自:http://www.oschina.net/code/snippet_1470644_36944
Android三种基本的加载网络图片方式,包括普通加载网络方式、用ImageLoader加载图片、用Volley加载图片。
标签: <无>
1. [代码]普通加载网络方式
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | public class NormalLoadPictrue { private String uri; private ImageView imageView; private byte [] picByte; public void getPicture(String uri,ImageView imageView){ this .uri = uri; this .imageView = imageView; new Thread(runnable).start(); } @SuppressLint ( "HandlerLeak" ) Handler handle = new Handler(){ @Override public void handleMessage(Message msg) { super .handleMessage(msg); if (msg.what == 1 ) { if (picByte != null ) { Bitmap bitmap = BitmapFactory.decodeByteArray(picByte, 0 , picByte.length); imageView.setImageBitmap(bitmap); } } } }; Runnable runnable = new Runnable() { @Override public void run() { try { URL url = new URL(uri); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod( "GET" ); conn.setReadTimeout( 10000 ); if (conn.getResponseCode() == 200 ) { InputStream fis = conn.getInputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte [] bytes = new byte [ 1024 ]; int length = - 1 ; while ((length = fis.read(bytes)) != - 1 ) { bos.write(bytes, 0 , length); } picByte = bos.toByteArray(); bos.close(); fis.close(); Message message = new Message(); message.what = 1 ; handle.sendMessage(message); } } catch (IOException e) { e.printStackTrace(); } } }; } |
2. [代码]用ImageLoader加载图片
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | public class ImageLoaderPicture { private DisplayImageOptions options; public ImageLoaderPicture(Context context) { ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).threadPriority(Thread.NORM_PRIORITY - 2 ) .denyCacheImageMultipleSizesInMemory() .discCacheFileNameGenerator( new Md5FileNameGenerator()) .tasksProcessingOrder(QueueProcessingType.LIFO).enableLogging() .memoryCache( new WeakMemoryCache()) .build(); ImageLoader.getInstance().init(config); options = new DisplayImageOptions.Builder() .showStubImage( 0 ) .showImageForEmptyUri( 0 ) .showImageOnFail( 0 ) .cacheInMemory().cacheOnDisc() .imageScaleType(ImageScaleType.IN_SAMPLE_INT) .bitmapConfig(android.graphics.Bitmap.Config.RGB_565) .build(); } public DisplayImageOptions getOptions() { return options; } public void setOptions(DisplayImageOptions options) { this .options = options; } } |
3. [代码]用Volley加载图片
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | public class VolleyLoadPicture { private ImageLoader mImageLoader = null ; private BitmapCache mBitmapCache; private ImageListener one_listener; public VolleyLoadPicture(Context context,ImageView imageView){ one_listener = ImageLoader.getImageListener(imageView, 0 , 0 ); RequestQueue mRequestQueue = Volley.newRequestQueue(context); mBitmapCache = new BitmapCache(); mImageLoader = new ImageLoader(mRequestQueue, mBitmapCache); } public ImageLoader getmImageLoader() { return mImageLoader; } public void setmImageLoader(ImageLoader mImageLoader) { this .mImageLoader = mImageLoader; } public ImageListener getOne_listener() { return one_listener; } public void setOne_listener(ImageListener one_listener) { this .one_listener = one_listener; } class BitmapCache implements ImageCache { private LruCache<String, Bitmap> mCache; private int sizeValue; public BitmapCache() { int maxSize = 10 * 1024 * 1024 ; mCache = new LruCache<String, Bitmap>(maxSize) { @Override protected int sizeOf(String key, Bitmap value) { sizeValue = value.getRowBytes() * value.getHeight(); return sizeValue; } }; } @Override public Bitmap getBitmap(String url) { return mCache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { mCache.put(url, bitmap); } } } |
4. [代码]Activity
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public class MainActivity extends Activity { private ImageView imageView001,imageView002,imageView003; public static final String picUrl = "http://img.quwenjiemi.com/2014/0701/thumb_420_234_20140701112917406.jpg" ; //public static final String picUrl = "http://192.168.1.181:8081/AndroidSerivces/house.jpg"; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView001 = (ImageView)findViewById(R.id.imageView001); imageView002 = (ImageView)findViewById(R.id.imageView002); imageView003 = (ImageView)findViewById(R.id.imageView003); //用普通方法加载图片 new NormalLoadPictrue().getPicture(picUrl,imageView001); //用ImageLoader加载图片 ImageLoader.getInstance().displayImage(picUrl, imageView002, new ImageLoaderPicture( this ).getOptions(), new SimpleImageLoadingListener()); //用Volley加载图片 VolleyLoadPicture vlp = new VolleyLoadPicture( this , imageView003); vlp.getmImageLoader().get(picUrl, vlp.getOne_listener()); } } |
5. [代码]布局文件
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <ScrollView 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" tools:context= ".MainActivity" > <RelativeLayout android:layout_width= "match_parent" android:layout_height= "match_parent" android:padding= "10dp" > <TextView android:id= "@+id/textView001" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "1.用普通方法的加载图片" /> <ImageView android:id= "@+id/imageView001" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_below= "@+id/textView001" /> <TextView android:id= "@+id/textView002" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_below= "@+id/imageView001" android:text= "2.用Android-Universal-Image-Loader加载图片" /> <ImageView android:id= "@+id/imageView002" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_below= "@+id/textView002" /> <TextView android:id= "@+id/textView003" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_below= "@+id/imageView002" android:text= "3.用Volley加载图片" /> <ImageView android:id= "@+id/imageView003" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_below= "@+id/textView003" /> </RelativeLayout> </ScrollView> |
6. [文件] 三种基本网络加载图片方式.rar ~ 2MB 下载(873)