SmartImageView使用

SmartImageView的使用

1,將下載好的SmartView源碼拷貝到src下
2,在item_list.xml佈局文件中使用SmartImageView(全類名)
3,在MyAdapter的findView方法中,也是使用smartImageView控件,獲取,添加數據
4,給SmartImageView添加數據
    siv.setImageUrl(imageUrl);

爲什麼使用開源的SmartImageView?

因爲ImageView在給控件添加圖片數據的時候,只能通過drawable,或者BitMap來
不能通過圖片地址(數據庫中一般只存圖片地址)

自定義控件SmartImageView

1,創建SmartImageView 繼承 ImageView
2,添加setImageUrl(String path)方法
3,一定要將所有的構造方法重寫(alt+shfit+s + c);
4,因爲SmartImageView是View,屬性主線程可以修改UI
  但是網絡請求需要在子線程中實現(將bitmap發送到handler)
  使用Handler(在handler中設置setImageBitmap(bitmap))

注意事項

1,自定義控件,一定要重寫所有的構造方法
2,控件可以修改UI,但是網絡請求必須放在子線程中操作
3,在xml佈局文件中,一定要使用全類名
4,佈局文件中,想讓圖片填充滿,使用android:scaleType="fitXY"

代碼部分

public class SmartImageView extends ImageView{



    private static final int TIME_OUT = 2000;

    private Handler handler = new Handler(){
        public void handleMessage(Message msg) {
            Bitmap bm = (Bitmap)msg.obj;
            SmartImageView.this.setImageBitmap(bm);
        };
    };

    public SmartImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        // TODO Auto-generated constructor stub
    }






    public SmartImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }



    public SmartImageView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }



    public void setImageUrl(final String path){
        new Thread(){
            public void run(){
                //將圖片路徑封裝成URL對象
                try {
                    URL url = new URL(path);
                    //通過url對象獲取連接對象
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    //設置連接屬性
                    conn.setConnectTimeout(TIME_OUT);
                    conn.setReadTimeout(TIME_OUT);
                    conn.setRequestMethod("GET");
                    //獲取連接的響應碼
                    int code = conn.getResponseCode();
                    if(code==200){                              //如果連接正常

                        //獲取字節輸入流
                        InputStream is = conn.getInputStream();
                        //解碼流獲取bitmap
                        Bitmap bm = BitmapFactory.decodeStream(is);
                        //創建一個Message對象,,將消息傳輸過去
                        Message msg = Message.obtain();
                        msg.obj = bm;
                        handler.sendMessage(msg);
                    }

                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }.start();


    }


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章