项目的收尾,分享等,轮播图无限循环,即纯图片的界面,三级缓存等

# 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、保存到文件缓存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值