您的位置:首页 > 其它

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

2016-11-05 11:00 218 查看
# 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、保存到文件缓存
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐