# 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、保存到文件缓存