1. 程式人生 > >專案的收尾,分享等,輪播圖無限迴圈,即純圖片的介面,三級快取等

專案的收尾,分享等,輪播圖無限迴圈,即純圖片的介面,三級快取等

# sharesdk分享
* 1、註冊登入,http://mob.com/#/index


* 2、進入後臺建立應用,記錄appkey


* 3、下載sdk,http://mob.com/#/downloadDetail/ShareSDK/android


* 4、開啟QuickIntegrater.jar,選擇平臺,複製到專案中


* 5、配置清單檔案


<uses-permission android:name="android.permission.GET_TASKS" />
   <uses-permission android:name="android.permission.INTERNET" />
   <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
   <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
   <uses-permission android:name="android.permission.READ_PHONE_STATE" />
   <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
   <uses-permission android:name="android.permission.GET_ACCOUNTS" />
   <!-- 藍芽分享所需的許可權 -->
   <uses-permission android:name="android.permission.BLUETOOTH" />
   <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />



<!-- sharesdk分享 -->
        <activity
            android:name="com.mob.tools.MobUIShell"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:windowSoftInputMode="stateHidden|adjustResize" >
            <intent-filter>
                <data android:scheme="tencent100371282" />


                <action android:name="android.intent.action.VIEW" />


                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>


            <!-- 呼叫新浪原生SDK,需要註冊的回撥activity -->
            <intent-filter>
                <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />


                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>


        <!-- 微信分享回撥 -->
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />


        <!-- 易信分享回撥 -->
        <activity
            android:name=".yxapi.YXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />


        <!-- 支付寶分享回撥 -->
        <activity
            android:name=".apshare.ShareEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />


* 6、替換assert目錄中的ShareSDK.xml,替換appkey


* 7、呼叫分享程式碼


private void showShare() {
ShareSDK.initSDK(this);
OnekeyShare oks = new OnekeyShare();
// 關閉sso授權
oks.disableSSOWhenAuthorize();
// 分享時Notification的圖示和文字 2.5.9以後的版本不呼叫此方法
// oks.setNotification(R.drawable.ic_launcher,
// getString(R.string.app_name));
// text是分享文字,所有平臺都需要這個欄位
oks.setText("世界那麼大,想出去看看");
// imagePath是圖片的本地路徑,Linked-In以外的平臺都支援此引數
oks.setImagePath("/sdcard/test.jpg");// 確保SDcard下面存在此張圖片
// 啟動分享GUI
oks.show(this);
}


# 輪播圖無限迴圈


1、Handler傳送訊息,呼叫自己的handleMessage方法


TabDetailPager的parseJson方法中:


// 傳送切換輪播圖的訊息
if(handler==null){
handler = new MyHandler();
}
// 清除之前的訊息
handler.removeCallbacksAndMessages(null);// null 是刪除之前傳送的訊息
handler.sendMessageDelayed(Message.obtain(), 3000);


2、在handleMessage方法中,切換ViewPager,再發送訊息實現無限迴圈


public void handleMessage(Message msg) {
super.handleMessage(msg);
// 判斷當前ViewPager是否存在介面上,如果不顯示就不再發訊息了
if(vp_tabdetail_topimage.getWindowVisibility()==View.GONE){
handler.removeCallbacksAndMessages(null);
return;
}
// 切換到最後一頁時,重新到第一頁,需要把當前的vp_tabdetail_topimage.getCurrentItem()+1 取模
// 收到3s後的延遲訊息,切換輪播圖 4 -> 0 5 -> 1
int nextIndex = (vp_tabdetail_topimage.getCurrentItem()+1)%topnewsData.size();
// 切到第一頁時,不要切換動畫
if (nextIndex==0){
vp_tabdetail_topimage.setCurrentItem(nextIndex,false);
}else{
vp_tabdetail_topimage.setCurrentItem(nextIndex);
}

// 再次傳送訊息,實現無限迴圈
handler.sendMessageDelayed(Message.obtain(), 3000);
}


3、圖片輪播事件處理


// 監聽ImageView,當觸控到圖片上,停止輪播圖的自動播放
imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 刪除訊息,實現停止輪播
handler.removeCallbacksAndMessages(null);
System.out.println("手指按下,停止輪播");
break;
case MotionEvent.ACTION_UP:
// 手指擡起,繼續輪播
handler.sendMessageDelayed(Message.obtain(), 3000);
System.out.println("手指擡起,繼續輪播");
break;
case MotionEvent.ACTION_CANCEL:
// 事件取消,繼續輪播
handler.sendMessageDelayed(Message.obtain(), 3000);
System.out.println("事件取消,繼續輪播");
break;

default:
break;
}
return true;// 返回false 孩子不處理事件 父容器就不傳遞其他的事件了
}
});


# 組圖介面


在titlebar.xml中新增組圖切換按鈕


<ImageButton 
        android:id="@+id/ib_titlebar_phototype"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="5dp"
        android:visibility="gone"
        android:background="@drawable/icon_pic_grid_type"
        />


在NewscenterPager的switchPager方法,根據選單點選的位置判斷是否顯示組圖按鈕


// 根據當前點選的位置判斷是否顯示組圖切換按鈕
if(position==2){
ib_titlebar_phototype.setVisibility(View.VISIBLE);
// 獲取組圖物件
final PhotoDetailPager photoDetailPager = (PhotoDetailPager) menuPagers.get(2);
ib_titlebar_phototype.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
photoDetailPager.switchPhotoType(ib_titlebar_phototype);
}
});
}else{
ib_titlebar_phototype.setVisibility(View.GONE);
}


在PhotoDetailPager中處理組圖的點選效果


private boolean isListType = true;// 當前展示的是Listview


public void switchPhotoType(ImageButton phototype) {
if (isListType) {
// 切換到Gridview
lv_photo_list.setVisibility(View.GONE);
gv_photo_grid.setVisibility(View.VISIBLE);
phototype.setBackgroundResource(R.drawable.icon_pic_list_type);
gv_photo_grid.setAdapter(new MyAdatper());
} else {
// 切換到Listview
lv_photo_list.setVisibility(View.VISIBLE);
gv_photo_grid.setVisibility(View.GONE);
phototype.setBackgroundResource(R.drawable.icon_pic_grid_type);
lv_photo_list.setAdapter(new MyAdatper());


}
isListType = !isListType;
}




# 三級快取


* 一級:記憶體快取,效率高,訪問快,容易導致記憶體溢位


sdk3.0之前,使用SoftRrefrence,當記憶體不足時,自動刪除軟引用引用的物件


3.0後,Lrucache,原則:最近最常使用原則,當記憶體不足時,把不常使用的物件刪除


* 二級:檔案快取,訪問較快


* 三級:訪問網路


1、從記憶體快取取圖片,取到就展示,取不到往下走


2、從檔案快取取圖片,取到就展示,取不到往下走

儲存到記憶體


3、訪問網路下載圖片,通過Handler展示


3.1、儲存到記憶體快取

3.2、儲存到檔案快取