close

如果有很多圖片但又不想要讓你的App裡面很大一包

就可以考慮用這種方式~~


Step 1:

在你想要呈現這張照片的xml裡面加入這個元件

<com.android.volley.toolbox.NetworkImageView
    android:id="@+id/networkimageview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
</com.android.volley.toolbox.NetworkImageView>

 

Step 2:

新增一個檔案LruImageCache

public class LruImageCache implements ImageLoader.ImageCache {

    private static LruCache mMemoryCache;

    private static LruImageCache lruImageCache;

    private LruImageCache(){
        // Get the Max available memory
        int maxMemory = (int) Runtime.getRuntime().maxMemory();
        int cacheSize = maxMemory / 8;
        mMemoryCache = new LruCache(cacheSize){
            @Override
            protected int sizeOf(String key, Bitmap bitmap){
                return bitmap.getRowBytes() * bitmap.getHeight();
            }
        };
    }

    public static LruImageCache instance(){
        if(lruImageCache == null){
            lruImageCache = new LruImageCache();
        }
        return lruImageCache;
    }

    @Override
    public Bitmap getBitmap(String arg0) {
        return mMemoryCache.get(arg0);
    }

    @Override
    public void putBitmap(String arg0, Bitmap arg1) {
        if(getBitmap(arg0) == null){
            mMemoryCache.put(arg0, arg1);
        }
    }
}

Step 3:

新增一個檔案ImageCache

public interface ImageCache {
    public Bitmap getBitmap(String url);
    public void putBitmap(String url, Bitmap bitmap);
}

 

Step 4:

到你想要呈現這張照片的activity裡面

以下Activity是完整的程式碼

 

public class NetworkActivity extends Activity{
    private NetworkImageView networkImageView;
    private RequestQueue mQueue;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        networkImageView = findViewById(R.id.networkimageview);
        mQueue = Volley.newRequestQueue(this);
        LruImageCache lruImageCache = LruImageCache.instance();
        ImageLoader imageLoader = new ImageLoader(mQueue,lruImageCache);
        //在圖片還沒載入前,先設定一張圖片
        networkImageView.setDefaultImageResId(R.drawable.ic_launcher_background);
        //當圖片無法載入,要呈現的圖片
        networkImageView.setErrorImageResId(R.drawable.ic_launcher_background);
        networkImageView.setImageUrl("http://img.my.csdn.net/uploads/201403/03/1393854094_4652.jpg", imageLoader);
    }
}

 

結果會像下面這樣

一開始會是一張綠色的底圖

那個是上面有提到的可以自己設定

 

arrow
arrow

    小小工程師 發表在 痞客邦 留言(0) 人氣()