Category Archives: Tutorial

Volley: Google 自家制 Android Network Library – ImageLoader

上回: Google I/O 2013 (1) – Volley: Google 自家制 Android Network Library

初試試Google 的Volley Library , 發現是比從前簡單了一點兒,由於沒有任何的Document,只有上網找找人家的案例再從錯誤中學習一下。今次講一講ImageLoader ,從前但部份也是用github上某個大大的Library 吧,今次試試使用volley實作。

首先,Volley 已經有很完善的Http Request 的流程,也有一推Caching Helper。

要做一個類ImageLoader Library ,Volley內已經有以下元件:

  • ImageLoader ( com.android.volley.toolbox.ImageLoader)
  • RequestQueue
  • ImageCache

實戰過程中,沒有像Youtube Google 神使用得那麼簡單。Youtube 內有BitmapLruCache,但是原來它的tool內沒有包括在內,需要用家親自處理。ImageLoader 內需要的是一個RequestQueue 處理Request ,及一個ImageCache。

/**

* Constructs a new ImageLoader.

* @param queue The RequestQueue to use for making image requests.

* @param imageCache The cache to use as an L1 cache.

*/

public ImageLoader(RequestQueue queue, ImageCache imageCache) {

mRequestQueue = queue;

mCache = imageCache;

}

本人做了一個類BitmapLruCache的Class

/***

* Helper Class for Volley ImageLoader Bitmap ImageCache, since it need LruCache

* Memory Cache Class

* @author 阿目

*

*/

class VolleyBitmapLruCache extends LruCache<String, Bitmap> implements ImageCache {

public static int getDefaultLruCacheSize() {

final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);

final int cacheSize = maxMemory / 8;

return cacheSize;

}

public VolleyBitmapLruCache(Context context) {

this(context , getDefaultLruCacheSize());

}

public VolleyBitmapLruCache(Context context , int sizeInKiloBytes) {

super(sizeInKiloBytes);

}

@Override

protected int sizeOf(String key, Bitmap value) {

return value.getRowBytes() * value.getHeight() / 1024;

}

@Override

public Bitmap getBitmap(String url) {

return get(url);

}

@Override

public void putBitmap(String url, Bitmap bitmap) {

put(url, bitmap);

}

}

另外為了方便自己使用整個流程,也起了一個Class 為VolleyImageLoaderHelper,如下:

/***

* VolleyImageLoaderHelper  Class for Volley ImageLoader

* Memory Cache Class

* @author 阿目

*

*/

public class VolleyImageLoaderHelper {

// ImageLoader From Volley

private static ImageLoader sImageLoader;

/**

*

* @return Volley ImageLoader

*/

public static ImageLoader get() {

return sImageLoader;

}

public static void initImageLoader(Context context) {

if (sImageLoader != null) {

return;

}

sImageLoader = new ImageLoader(

Volley.newRequestQueue(context), // Volley Request

new VolleyBitmapLruCache(context) // Volley BitmapLruCacheHepler

);

}

}

第一次使用時,在e.g. MainActivity 下啟動VolleyImageLoaderHelper

VolleyImageLoaderHelper.initImageLoader(getApplicationContext());  // init VolleyImageLoaderHelper

VolleyImageLoaderHelper.get().get(url, new ImageListener() {

@Override

public void onErrorResponse(VolleyError error) {

img.setImageResource(R.drawable.ic_launcher);

}

@Override

public void onResponse(final ImageContainer response, boolean isImmediate) {

// response.getBitmap();   // 這個就是最後得來的Bitmap

}

}

這使得成個流程也非常簡單。

以下是 上面的簡單例子:github.com/extralam/VolleyImageHelper

*有沒有發現像流了一點東西呢?其實這個實作不是完全品,這個helper 是沒有做fileCache ,在Volley 內有DiskBasedCache可以幫助你完成這工作。

除此以外,Volley Library 已經有一個NetworkImageView 的widget 幫手處理Image 。

html5的powerpoint

最近(其實都兩個月了)Google 在其http://code.google.com 上公開一套可以使用 HTML5 Slide Template .

用家只需要簡單的步驟就可以得到類似powerpoint的presentation 效果了!

Demo 在此: http://html5slides.googlecode.com/svn/trunk/template

工具在此:http://code.google.com/p/html5slides/

簡單講就係一個HTML網頁加上JS,咁就係HTML5。

syntax 都係一樣看下面,所以有基本HTML認知就可以了,非常簡單。

<article class=’smaller’>
        <h3>
          Slide with bullet points (small font)
        </h3>
        <ul>
          <li>
            Use this template to create your presentation
          <li>
            Use the provided color palette, box and arrow graphics, and
            chart styles
          <li>
            Instructions are provided to assist you in using this
            presentation template effectively
          <li>
            At all times strive to maintain Google’s corporate look and feel
        </ul>
      </article>
      <article>
        <h3>
          Slide with a table
        </h3>
        <table>
          <tr>
            <th>
              Name
            <th>
              Occupation
          <tr>
            <td>
              Luke Mahé
            <td>
              V.P. of Keepin’ It Real
          <tr>
            <td>
              Marcin Wichary
            <td>
              The Michael Bay of Doodles
        </table>
      </article>
      <article class=’smaller’>
        <h3>
          Slide with a table (smaller text)
        </h3>
        <table>
          <tr>

簡易charset 轉換 [C/C++程式]

由於工作關係時常要轉換charset,

經過一些時間再資料整合後,畢者現在使用的工具。

簡單說明怎樣使用,不作詳細解使每一部分了,如下

Read the rest of this entry