安卓類似於微信朋友圈功能,集合了Gson,PhotoView,android-universal-image-loader這些用法

安卓類似於微信朋友圈功能,集合了Gson,PhotoView,android-universal-image-loader這些用法。

最近剛學了這些,就用這些做了個小例子,大家可以去下載源碼,裏面還是有很多知識是可以學到的。PhotoView還是網上那個開源PhotoView,不過我打成jar包了,Gson的話可以看我上一篇文章,裏面有一些常用的用法,imageLoader的話,大家可以去 http://blog.csdn.net/vipzjyno1/article/details/23206387 這裏看,很詳細。接下來就講裏面用到的一些方法。

忘了要點,要先看圖纔有感覺!

一.Gson模仿後臺數據

private void initData() {
		// 這裏只做5份數據,此時數據由服務器返回的json
		String jsonData = "[{\"name\":\"小明\",\"content\":\"今天天氣不錯啊\",\"headUrl\":\"http://img4.duitang.com/uploads/item/201411/01/20141101172619_5sz2Y.jpeg\",\"imageUrl\":[]},"
				+ "{\"name\":\"小紅\",\"content\":\"是啊,真的很不錯呢\",\"headUrl\":\"http://img4q.duitang.com/uploads/item/201411/01/20141101171342_xHRH2.jpeg\",\"imageUrl\":[\"http://g.hiphotos.baidu.com/image/h%3D200/sign\u003d55c721bb29dda3cc14e4bf2031e83905/32fa828ba61ea8d3e3eecc20900a304e241f58c1.jpg\"]},"
				+ "{\"name\":\"小胖\",\"content\":\"快出來曬太陽啊啊啊啊啊a \",\"headUrl\":\"http://img5q.duitang.com/uploads/item/201505/15/20150515140254_3tZSc.jpeg\",\"imageUrl\":[\"http://g.hiphotos.baidu.com/image/h%3D200/sign\u003d55c721bb29dda3cc14e4bf2031e83905/32fa828ba61ea8d3e3eecc20900a304e241f58c1.jpg\",\"http://pic.nipic.com/2008-07-05/20087584237954_2.jpg\"]},"
				+ "{\"name\":\"小妞\",\"content\":\"不曬太陽哪行啊\",\"headUrl\":\"http://p2.gexing.com/G1/M00/CD/EA/rBABFFHgw7Si8OQhAAAeKVpPAio937_200x200_3.jpg\",\"imageUrl\":[\"http://pic4.nipic.com/20090903/2125404_132352014851_2.jpg\",\"http://img.kutoo8.com//upload/image/78018037/201305280911_960x540.jpg\",\"http://www.xiaoxiongbizhi.com/wallpapers/__85/2/f/2fg40v2zs.jpg\"]},"
				+ "{\"name\":\"帥哥\",\"content\":\"曬完趕緊來盤Lol , 五黑啦~~\",\"headUrl\":\"http://v1.qzone.cc/avatar/201405/31/17/00/53899a499103b640.jpg%21200x200.jpg\",\"imageUrl\":[\"http://www.xiaoxiongbizhi.com/wallpapers/__85/1/9/19r0an0jm.jpg\",\"http://i2.sinaimg.cn/gm/2014/1231/U8776P115DT20141231160820.jpg\",\"http://img.kejixun.com/2014/0128/20140128091127259.jpg\",\"http://img4q.duitang.com/uploads/item/201411/01/20141101171342_xHRH2.jpeg\",\"http://img.kejixun.com/2013/0608/20130608095102642.jpg\"]}]";
		lists = new ArrayList<Person>();
		Type type = new TypeToken<List<Person>>(){}.getType();
		Gson gson = new Gson();
		lists = gson.fromJson(jsonData, type);
		
		adapter = new ListViewAdapter(lists , this);
		listView.setAdapter(adapter);
	}
Gson這裏的話是模仿後臺服務器給過來的JSON數據,然後解析成相應的對象,是挺長的。這個string是我先把對象轉爲json才弄出來的,要自己寫json的話你懂的!這裏也沒什麼好說,不懂Gson用法可以參考前篇文章。哦對了,字符串中\" 才表示一個雙引號的,所以裏面要自己補充\

二.ListView與GridView衝突的問題

可以看到,ListView裏面的Item帶有GridView,必然會引起滑動衝突,導致GridView的Item只能顯示一部分而已,網上也有很多關於ListView , ScrollView , GridView 之間的嵌套問題,大有多這樣的共同方法,就是重寫嵌套的那個view 的 onMeasure 方法,好讓它getView的時候知道它的高度

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);
		super.onMeasure(widthMeasureSpec, expandSpec);
	}
關於滑動衝突的問題大家看去這裏看看 http://bbs.anzhuo.cn/thread-982250-1-1.html

三.圖片緩存android-universal-image-loader

在ImageLoader的配置參數中,我們來看看

	// 顯示的圖片的各種格式DisplayImageOptions 的設置
		DisplayImageOptions options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.ic_stub_gray) // 設置圖片在下載期間顯示的圖片
				.showImageForEmptyUri(R.drawable.ic_error) // 設置圖片Uri爲空或是錯誤的時候顯示的圖片
				.showImageOnFail(R.drawable.ic_error) // 設置圖片加載/解碼過程中錯誤時候顯示的圖片
				.cacheInMemory(true) // 設置下載的圖片是否緩存在內存中
				.cacheOnDisc(true) // 設置下載的圖片是否緩存在SD卡中
				.considerExifParams(true) // 是否考慮JPEG圖像EXIF參數(旋轉,翻轉)
				.bitmapConfig(Bitmap.Config.RGB_565)// 設置圖片的解碼類型
				.build();
		//自定義緩存目錄
		File cacheDir = StorageUtils.getOwnCacheDirectory(getApplicationContext(), "imageloader/Cache");

		ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
				.threadPriority(Thread.NORM_PRIORITY - 2).denyCacheImageMultipleSizesInMemory()
				.discCacheFileNameGenerator(new Md5FileNameGenerator()).tasksProcessingOrder(QueueProcessingType.LIFO)
				.writeDebugLogs() // Remove for release app
				.discCache(new UnlimitedDiscCache(cacheDir)) // 緩存目錄
				.defaultDisplayImageOptions(options).discCacheSize(50 * 1024 * 1024)//
				.discCacheFileCount(100)// 緩存文件數
				.writeDebugLogs().build();
		// Initialize ImageLoader with configuration.
		ImageLoader.getInstance().init(config);


裏面我開了圖片緩存,緩存目錄我自定義在imageLoader中了。這些配置代碼通常是在Application中的,然後配置到AndroidManifest.xml中

具體用法可到  http://blog.csdn.net/vipzjyno1/article/details/23206387 這裏去看下

四.關於圖片界面上的指示器,如顯示圖片數目那裏 , 2/5 。

在xml中是用<TextView @string/tv_indicator  ,在string 中我們的tv_indicator 是

	<string name="tv_indicator">%1$d/%2$d</string>
比如“我今年23歲了”,這個23是整型的。在string.xml中可以這樣寫,<string name="old">我今年%1$d歲了</string>。%1$d表達的意思是整個name=”old”中,第一個整型的替代。如果一個name中有兩個需要替換的整型內容,則第二個寫爲:%2$d,以此類推;當然%1$d是整型的,還有%1$s, %1$f ,分別表示字符串和浮點數。

定義好後在代碼中代用getString方法

	String textString = getString(R.string.tv_indicator, num+1 , lists.size());//後面兩個參數對應%1$d和%2$d以此類推
	tvIndicator.setText(textString);

源碼下載 http://download.csdn.net/detail/hohohong/9452118




 





發佈了23 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章