ShareSDK 的集成请看官网集成文档 ShareSDK集成。
封装 ShareManager
1、先创建一个分享数据的实体类
/**
* @desciption: 要分享的数据实体
*/
public class ShareData {
/**
* 要分享到的平台的参数
*/
public Platform.ShareParams mShareParams;
/**
* 要分享到的平台
*/
public ShareManager.PlatformType mPlatformType;
}
2、ShareManager 类完整代码
/**
* @desciption: 分享功能统一入口,负责发送数据到指定平台,可以优化为一个单例模式
*/
public class ShareManager {
/**
* 要分享到的平台
*/
private Platform mCurrentPlatform;
private ShareManager() {
}
public static ShareManager getInstance() {
return Holder.INSTANCE;
}
/**
* 第一个执行的方法,最好在程序入口入执行
*
* @param context context
*/
public static void initSDK(Context context) {
MobSDK.init(context);
}
/**
* 分享数据到不同的平台
*/
public void shareData(ShareData shareData, PlatformActionListener listener) {
switch (shareData.mPlatformType) {
case QQ:
mCurrentPlatform = ShareSDK.getPlatform(QQ.name());
break;
case QZone:
mCurrentPlatform = ShareSDK.getPlatform(QZone.name());
break;
case WeChat:
mCurrentPlatform = ShareSDK.getPlatform(WeChat.name());
break;
case WechatMoments:
mCurrentPlatform = ShareSDK.getPlatform(WechatMoments.name());
break;
default:
}
//由应用层去处理回调,分享平台不关心。
mCurrentPlatform.setPlatformActionListener(listener);
mCurrentPlatform.share(shareData.mShareParams);
}
/**
* 应用程序需要的平台
*/
public enum PlatformType {
//qq
QQ,
QZone,
WeChat,
WechatMoments
}
private static class Holder {
private static final ShareManager INSTANCE = new ShareManager();
}
}
以上是ShareManager的完成功能代码,如需其他的功能可以根据需要添加。
自定义分享UI界面
1、自定义Dialog继承Dialog,初始化UI界面数据
/**
* @desciption: 分享Dialog
*/
public class ShareDialog extends Dialog implements View.OnClickListener {
private Context mContext;
/**
* 是否显示下载
*/
private boolean isShowDownload;
private DisplayMetrics mDisplayMetrics;
/**
* UI
*/
private RelativeLayout mWeixinLayout;
private RelativeLayout mWeixinMomentLayout;
private RelativeLayout mQQLayout;
private RelativeLayout mQZoneLayout;
private RelativeLayout mDownloadLayout;
private TextView mCancelView;
/**
* share relative
*/
/**
* 指定分享类型
*/
private int mShareType;
/**
* 指定分享内容标题
*/
private String mShareTitle;
/**
* 指定分享内容文本
*/
private String mShareText;
/**
* 指定分享本地图片
*/
private String mSharePhoto;
/**
* titleUrl是标题的网络链接,仅在人人网和QQ空间使用
*/
private String mShareTileUrl;
/**
* siteUrl是分享此内容的网站地址,仅在QQ空间使用
*/
private String mShareSiteUrl;
/**
* site是分享此内容的网站名称,仅在QQ空间使用
*/
private String mShareSite;
/**
* url仅在微信(包括好友和朋友圈)中使用
*/
private String mUrl;
/**
* 分享回调监听
*/
private PlatformActionListener mListener = new PlatformActionListener() {
@Override
public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
}
@Override
public void onError(Platform platform, int i, Throwable throwable) {
}
@Override
public void onCancel(Platform platform, int i) {
}
};
public ShareDialog(@NonNull Context context, boolean isShowDownload) {
super(context, R.style.SheetDialogStyle);
mContext = context;
this.isShowDownload = isShowDownload;
mDisplayMetrics = mContext.getResources().getDisplayMetrics();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_share_layout);
initView();
}
private void initView() {
//通过获取到dialog的window来控制dialog的宽高及位置
Window window = getWindow();
if (window != null) {
window.setGravity(Gravity.BOTTOM);
WindowManager.LayoutParams layoutParams = window.getAttributes();
layoutParams.width = mDisplayMetrics.widthPixels;
window.setAttributes(layoutParams);
}
mWeixinLayout = findViewById(R.id.weixin_layout);
mWeixinLayout.setOnClickListener(this);
mWeixinMomentLayout = findViewById(R.id.moment_layout);
mWeixinMomentLayout.setOnClickListener(this);
mQQLayout = findViewById(R.id.qq_layout);
mQQLayout.setOnClickListener(this);
mQZoneLayout = findViewById(R.id.qzone_layout);
mQZoneLayout.setOnClickListener(this);
mCancelView = findViewById(R.id.cancel_view);
mCancelView.setOnClickListener(this);
}
/**
* 指定分享内容标题
*/
public void setShareTitle(String title) {
mShareTitle = title;
}
/**
* 指定分享本地图片
*/
public void setImagePhoto(String photo) {
mSharePhoto = photo;
}
/**
* 指定分享类型
*/
public void setShareType(int type) {
mShareType = type;
}
/**
* site是分享此内容的网站名称,仅在QQ空间使用
*/
public void setShareSite(String site) {
mShareSite = site;
}
/**
* titleUrl是标题的网络链接,仅在人人网和QQ空间使用
*/
public void setShareTitleUrl(String titleUrl) {
mShareTileUrl = titleUrl;
}
/**
* url仅在微信(包括好友和朋友圈)中使用
*/
public void setUrl(String url) {
mUrl = url;
}
/**
* siteUrl是分享此内容的网站地址,仅在QQ空间使用
*/
public void setShareSiteUrl(String siteUrl) {
mShareSiteUrl = siteUrl;
}
/**
* 指定分享内容文本
*/
public void setShareText(String text) {
mShareText = text;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.weixin_layout:
shareData(ShareManager.PlatformType.WeChat);
break;
case R.id.moment_layout:
shareData(ShareManager.PlatformType.WechatMoments);
break;
case R.id.qq_layout:
shareData(ShareManager.PlatformType.QQ);
break;
case R.id.qzone_layout:
shareData(ShareManager.PlatformType.QZone);
break;
case R.id.cancel_view:
dismiss();
break;
default:
}
}
/**
* 分享数据
*/
private void shareData(ShareManager.PlatformType platformType) {
ShareData mData = new ShareData();
Platform.ShareParams params = new Platform.ShareParams();
params.setShareType(mShareType);
params.setTitle(mShareTitle);
params.setTitleUrl(mShareTileUrl);
params.setSite(mShareSite);
params.setSiteUrl(mShareSiteUrl);
params.setText(mShareText);
params.setImagePath(mSharePhoto);
params.setUrl(mUrl);
mData.mPlatformType = platformType;
mData.mShareParams = params;
ShareManager.getInstance().shareData(mData, mListener);
}
}
ShareDialog 样式Style
<style name="SheetDialogStyle" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/white</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowFrame">@null</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@style/ActionSheetDialogAnimation</item>
</style>
<style name="ActionSheetDialogAnimation" parent="@android:style/Animation.Dialog">
<item name="android:windowEnterAnimation">@anim/action_bottom_in</item>
<item name="android:windowExitAnimation">@anim/action_bottom_out</item>
</style>
ShareDialog 底部进入和退出动画
//action_bottom_in
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fillAfter="true">
<translate
android:fromYDelta="100%"
android:toYDelta="0"/>
</set>
//action_bottom_out
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fillAfter="true">
<translate
android:fromYDelta="0"
android:toYDelta="100%"/>
</set>
在Activity中使用分享Dialog
ShareDialog dialog = new ShareDialog(this, true);
dialog.setShareType(Platform.SHARE_IMAGE);
dialog.setShareTitle(getString(R.string.imooc));
dialog.setShareTitleUrl(getString(R.string.imooc_site));
dialog.setShareText(getString(R.string.imooc));
dialog.setShareSite(getString(R.string.imooc));
dialog.setShareTitle(getString(R.string.imooc));
dialog.setImagePhoto(mPhotoLists.get(currentPos));
dialog.setUrl(mPhotoLists.get(currentPos));
dialog.show();
网友评论