Android創建一個WebImageView

Android創建一個WebImageView

這個WebImageView的主要功能就是一個:指定一個URI,這個控件去延遲加載並顯示在該控件的位置上。。
在Github上,這種類似的框架已經非常多並且非常的具有性能性。。 本篇博文只是使用此實例簡單的幫助大家理解一下這方面的工作原理。
效果圖就不貼了,跟ImageView一模一樣。。

內部的主要邏輯實現:

自定義控件,繼承於ImageView, 內部實現一個叫做setImageBackground(String uri)的方法,定義一個內部類AsyncTask進行訪問之後再設置給ImageView就好了。。 (注意: 需要加入訪問網絡的權限、)
整體的邏輯都說完了,就直接上代碼吧。

1、繼承於ImageView

public class WebImageView extends ImageView
讓這個控件具有ImageView的所有能力。

2、定義成員屬性

private Drawable mDrawable;

主要就是用來在setImageBackground系列方法中進行引用背景的對象,要不要這個無所謂 。

3、實現系列的setImageBackground方法

爲什麼說系列呢, 無論如何也不能讓這個控件簡單的只有給uri的時候纔有用啊, 要不然就是個負擔。。
public void setImageBackground(Drawable mDrawable) {
	this.mDrawable = mDrawable;
	setImageDrawable(this.mDrawable);
}

public void setImageBackground(int resultId) {

	mDrawable = getResources().getDrawable(resultId);
	setImageDrawable(mDrawable);
}

public void setImageBackground(String url) {
	MyAsyncTask mAsyncTask = new MyAsyncTask();
	mAsyncTask.execute(url);
}


通過這三個方法可以看出,支持三種賦值方案, 內部調用的setImageDrawable是原本的ImageView這個控件所提供的原生方法。
在接受的參數爲url的時候可以看出是使用了一個AsyncTask類進行的網絡訪問(因爲AsyncTask可以很有效的進行ui線程邏輯處理,所以此處不採用Thread+Handler處理。

MyAsyncTask是一個WebImageView的內部類、AsyncTask過於基礎不進行講解,直接給出代碼。
private class MyAsyncTask extends AsyncTask<String, Void, Bitmap> {

	@Override
	protected Bitmap doInBackground(String... params) {
		String url = params[0];
		try {
			HttpURLConnection mConnection = (HttpURLConnection) (new URL(url)).openConnection();
			InputStream is = mConnection.getInputStream();

			return BitmapFactory.decodeStream(is);
		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}

	@Override
	protected void onPostExecute(Bitmap result) {
		mDrawable = new BitmapDrawable(getResources(), result);

		if (mDrawable != null) {
			setImageBackground(mDrawable);
		}
	}

}


當然啦,代碼也沒有技術含量,本篇博文主要就是想告訴大家這個框架的大概結構. 練習可以採用這個寫法。





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