專案的收尾,分享等,輪播圖無限迴圈,即純圖片的介面,三級快取等
阿新 • • 發佈:2019-02-19
# 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、儲存到檔案快取
* 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、儲存到檔案快取