友盟自定义分享-生成带图片的二维码,自定义分享布局

 

http://www.2cto.com/weixin/201503/383512.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
public class UmengShare {
     private Activity activity = null ;
     private UMSocialService mController = null ;
     private Dialog shareDialog = null ;
     private Bitmap bitmapCode = null ;
     
     public UmengShare(Activity activity){
         this .activity = activity;
     }
     
     public void showShareUI(String shareContent){
         // 首先在您的Activity中添加如下成员变量
         mController = UMServiceFactory.getUMSocialService( "com.umeng.share" ,RequestType.SOCIAL);
         // 设置分享内容
         if (TextUtils.isEmpty(shareContent))
             mController.setShareContent( "体验最新应用" );
         else
             mController.setShareContent(shareContent);
         try {
             bitmapCode = EncodingHandler.gerateLogoCode(activity, "http://www.baidu.com/" , 200 );
//          bitmapCode = EncodingHandler.createQRCode(Const.URL.URL_SERVER_NEW, 200);
         } catch (WriterException e) {
             bitmapCode = null ;
         }
         addWXShare();
         addFriendCircleShare();
 
         //设置新浪SSO handler
         mController.getConfig().setSsoHandler( new SinaSsoHandler());
         //设置腾讯微博SSO handler
         mController.getConfig().setSsoHandler( new TencentWBSsoHandler());
         
         mController.getConfig().removePlatform(SHARE_MEDIA.RENREN, SHARE_MEDIA.DOUBAN);
         mController.getConfig().setPlatformOrder(SHARE_MEDIA.TENCENT,SHARE_MEDIA.WEIXIN,SHARE_MEDIA.SINA,SHARE_MEDIA.WEIXIN_CIRCLE);
//      mController.openShare(activity, false);
 
         
         shareDialog = new Dialog(activity, R.style.Theme_Dialog);
         shareDialog.setContentView(R.layout.share_popup_layout);
         shareDialog.setCanceledOnTouchOutside( true );
         ImageView codeImage = (ImageView)shareDialog.findViewById(R.id.share_imageview);
         RelativeLayout tencentShare = (RelativeLayout)shareDialog.findViewById(R.id.tencent_layout);
         RelativeLayout wxShare = (RelativeLayout)shareDialog.findViewById(R.id.wx_share_layout);
         RelativeLayout sinashare = (RelativeLayout)shareDialog.findViewById(R.id.sina_share_layout);
         RelativeLayout circleshare = (RelativeLayout)shareDialog.findViewById(R.id.circle_share_layout);
         
         ShareOnClickListener listener = new ShareOnClickListener();
         tencentShare.setOnClickListener(listener);
         wxShare.setOnClickListener(listener);
         sinashare.setOnClickListener(listener);
         circleshare.setOnClickListener(listener);
         if (bitmapCode != null ){
             codeImage.setImageBitmap(bitmapCode);
             mController.setShareImage( new UMImage(activity, bitmapCode));
         } else {
             codeImage.setBackgroundResource(R.drawable.share_qr_code_image);
         }
         shareDialog.show();
     }
     
     
     /**
      * 微信
      */
     private void addWXShare() {
         // wx967daebe835fbeac是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID
         String appID = "<span style=" font-family: Arial, Helvetica, sans-serif; ">wx967daeb35fbeac</span><span style=" font-family: Arial, Helvetica, sans-serif; ">" ;</span>
         // 添加微信平台
         UMWXHandler wxHandler = new UMWXHandler(activity, appID);
         wxHandler.addToSocialSDK();
         
         //设置微信好友分享内容
         WeiXinShareContent weixinContent = new WeiXinShareContent();
         //设置分享文字
         weixinContent.setShareContent( "体验最新应用,边玩边赚钱!马上入驻【星云互动】" );
         //设置title
         weixinContent.setTitle( "星云互动" );
         //设置分享内容跳转URL
         weixinContent.setTargetUrl( "http://www.scloudm.com/" );
         //设置分享图片
         weixinContent.setShareImage( new UMImage(activity, bitmapCode));
         mController.setShareMedia(weixinContent);
     }
 
     /**
      * 微信朋友圈
      */
     private void addFriendCircleShare() {
         String appID = "wx06c10cd07a5ac0e9" ;
         // 支持微信朋友圈
         UMWXHandler wxCircleHandler = new UMWXHandler(activity, appID);
         wxCircleHandler.setToCircle( true );
         wxCircleHandler.addToSocialSDK();
 
         
         //设置微信好友分享内容
         CircleShareContent circleMedia  = new CircleShareContent ();
         //设置分享文字
         circleMedia.setShareContent( "体验最新应用,边玩边赚钱!马上入驻【星云互动】" );
         //设置title
         circleMedia.setTitle( "星云互动" );
         //设置分享内容跳转URL
         circleMedia.setTargetUrl( "http://www.scloudm.com/" );
         //设置分享图片
         circleMedia.setShareImage( new UMImage(activity, bitmapCode));
         mController.setShareMedia(circleMedia );
     }
     
     /**
      * 分享
      * @param shareType
      */
     private void shareClick(SHARE_MEDIA shareType){
         mController.postShare(activity, shareType, new SnsPostListener() {
             @Override
             public void onStart() {
                 
                 ToastUtils.showTextToast(activity, "开始分享." );
             }
             
             @Override
             public void onComplete(SHARE_MEDIA arg0, int eCode, SocializeEntity arg2) {
                 if (bitmapCode != null ){
                     bitmapCode.recycle();
                     bitmapCode = null ;
                 }
                 if (eCode == 200 ) {
                     ToastUtils.showTextToast(activity, "分享成功." );
                 } /*else {
                      String eMsg = "";
                      if (eCode == -101){
                          eMsg = "没有授权";
                      }
                      ToastUtils.showTextToast(activity, "分享失败[" + eCode + "] " + eMsg);
                 }*/
             }
         });
     }
     
     //分享按钮点击事件
     protected class ShareOnClickListener implements OnClickListener{
 
         @Override
         public void onClick(View v) {
             if (shareDialog != null && shareDialog.isShowing()){
                 shareDialog.dismiss();
             }
             switch (v.getId()) {
             case R.id.tencent_layout:
                 shareClick(SHARE_MEDIA.TENCENT);
                 break ;
             case R.id.wx_share_layout:
                 shareClick(SHARE_MEDIA.WEIXIN);
                 break ;
             case R.id.sina_share_layout:
                 shareClick(SHARE_MEDIA.SINA);
                 break ;
             case R.id.circle_share_layout:
                 shareClick(SHARE_MEDIA.WEIXIN_CIRCLE);
                 break ;
             }
         }
     }
     
     
}

2、自定义布局

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
xpublic class UmengShare {
     private Activity activity = null ;
     private UMSocialService mController = null ;
     private Dialog shareDialog = null ;
     private Bitmap bitmapCode = null ;
     
     public UmengShare(Activity activity){
         this .activity = activity;
     }
     
     public void showShareUI(String shareContent){
         // 首先在您的Activity中添加如下成员变量
         mController = UMServiceFactory.getUMSocialService( "com.umeng.share" ,RequestType.SOCIAL);
         // 设置分享内容
         if (TextUtils.isEmpty(shareContent))
             mController.setShareContent( "体验最新应用" );
         else
             mController.setShareContent(shareContent);
         try {
             bitmapCode = EncodingHandler.gerateLogoCode(activity, "http://www.baidu.com/" , 200 );
//          bitmapCode = EncodingHandler.createQRCode(Const.URL.URL_SERVER_NEW, 200);
         } catch (WriterException e) {
             bitmapCode = null ;
         }
         addWXShare();
         addFriendCircleShare();
 
         //设置新浪SSO handler
         mController.getConfig().setSsoHandler( new SinaSsoHandler());
         //设置腾讯微博SSO handler
         mController.getConfig().setSsoHandler( new TencentWBSsoHandler());
         
         mController.getConfig().removePlatform(SHARE_MEDIA.RENREN, SHARE_MEDIA.DOUBAN);
         mController.getConfig().setPlatformOrder(SHARE_MEDIA.TENCENT,SHARE_MEDIA.WEIXIN,SHARE_MEDIA.SINA,SHARE_MEDIA.WEIXIN_CIRCLE);
//      mController.openShare(activity, false);
 
         
         shareDialog = new Dialog(activity, R.style.Theme_Dialog);
         shareDialog.setContentView(R.layout.share_popup_layout);
         shareDialog.setCanceledOnTouchOutside( true );
         ImageView codeImage = (ImageView)shareDialog.findViewById(R.id.share_imageview);
         RelativeLayout tencentShare = (RelativeLayout)shareDialog.findViewById(R.id.tencent_layout);
         RelativeLayout wxShare = (RelativeLayout)shareDialog.findViewById(R.id.wx_share_layout);
         RelativeLayout sinashare = (RelativeLayout)shareDialog.findViewById(R.id.sina_share_layout);
         RelativeLayout circleshare = (RelativeLayout)shareDialog.findViewById(R.id.circle_share_layout);
         
         ShareOnClickListener listener = new ShareOnClickListener();
         tencentShare.setOnClickListener(listener);
         wxShare.setOnClickListener(listener);
         sinashare.setOnClickListener(listener);
         circleshare.setOnClickListener(listener);
         if (bitmapCode != null ){
             codeImage.setImageBitmap(bitmapCode);
             mController.setShareImage( new UMImage(activity, bitmapCode));
         } else {
             codeImage.setBackgroundResource(R.drawable.share_qr_code_image);
         }
         shareDialog.show();
     }
     
     
     /**
      * 微信
      */
     private void addWXShare() {
         // wx967daebe835fbeac是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID
         String appID = "<span style=" font-family: Arial, Helvetica, sans-serif; ">wx967daeb35fbeac</span><span style=" font-family: Arial, Helvetica, sans-serif; ">" ;</span>
         // 添加微信平台
         UMWXHandler wxHandler = new UMWXHandler(activity, appID);
         wxHandler.addToSocialSDK();
         
         //设置微信好友分享内容
         WeiXinShareContent weixinContent = new WeiXinShareContent();
         //设置分享文字
         weixinContent.setShareContent( "体验最新应用,边玩边赚钱!马上入驻【星云互动】" );
         //设置title
         weixinContent.setTitle( "星云互动" );
         //设置分享内容跳转URL
         weixinContent.setTargetUrl( "http://www.scloudm.com/" );
         //设置分享图片
         weixinContent.setShareImage( new UMImage(activity, bitmapCode));
         mController.setShareMedia(weixinContent);
     }
 
     /**
      * 微信朋友圈
      */
     private void addFriendCircleShare() {
         String appID = "wx06c10cd07a5ac0e9" ;
         // 支持微信朋友圈
         UMWXHandler wxCircleHandler = new UMWXHandler(activity, appID);
         wxCircleHandler.setToCircle( true );
         wxCircleHandler.addToSocialSDK();
 
         
         //设置微信好友分享内容
         CircleShareContent circleMedia  = new CircleShareContent ();
         //设置分享文字
         circleMedia.setShareContent( "体验最新应用,边玩边赚钱!马上入驻【星云互动】" );
         //设置title
         circleMedia.setTitle( "星云互动" );
         //设置分享内容跳转URL
         circleMedia.setTargetUrl( "http://www.scloudm.com/" );
         //设置分享图片
         circleMedia.setShareImage( new UMImage(activity, bitmapCode));
         mController.setShareMedia(circleMedia );
     }
     
     /**
      * 分享
      * @param shareType
      */
     private void shareClick(SHARE_MEDIA shareType){
         mController.postShare(activity, shareType, new SnsPostListener() {
             @Override
             public void onStart() {
                 
                 ToastUtils.showTextToast(activity, "开始分享." );
             }
             
             @Override
             public void onComplete(SHARE_MEDIA arg0, int eCode, SocializeEntity arg2) {
                 if (bitmapCode != null ){
                     bitmapCode.recycle();
                     bitmapCode = null ;
                 }
                 if (eCode == 200 ) {
                     ToastUtils.showTextToast(activity, "分享成功." );
                 } /*else {
                      String eMsg = "";
                      if (eCode == -101){
                          eMsg = "没有授权";
                      }
                      ToastUtils.showTextToast(activity, "分享失败[" + eCode + "] " + eMsg);
                 }*/
             }
         });
     }
     
     //分享按钮点击事件
     protected class ShareOnClickListener implements OnClickListener{
 
         @Override
         public void onClick(View v) {
             if (shareDialog != null && shareDialog.isShowing()){
                 shareDialog.dismiss();
             }
             switch (v.getId()) {
             case R.id.tencent_layout:
                 shareClick(SHARE_MEDIA.TENCENT);
                 break ;
             case R.id.wx_share_layout:
                 shareClick(SHARE_MEDIA.WEIXIN);
                 break ;
             case R.id.sina_share_layout:
                 shareClick(SHARE_MEDIA.SINA);
                 break ;
             case R.id.circle_share_layout:
                 shareClick(SHARE_MEDIA.WEIXIN_CIRCLE);
                 break ;
             }
         }
     }
     
     
}
3、生成二维码图片

 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
public final class EncodingHandler {
     private static final int BLACK = 0xff000000 ;
     private static final int WHITE = 0xffffffff ;
     
     public static Bitmap createQRCode(String str, int widthAndHeight) throws WriterException {
         Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>(); 
         hints.put(EncodeHintType.CHARACTER_SET, "utf-8" );
         BitMatrix matrix = new MultiFormatWriter().encode(str,
                 BarcodeFormat.QR_CODE, widthAndHeight, widthAndHeight);
         int width = matrix.getWidth();
         int height = matrix.getHeight();
         int [] pixels = new int [width * height];
         
         for ( int y = 0 ; y < height; y++) {
             for ( int x = 0 ; x < width; x++) {
                 if (matrix.get(x, y)) {
                     pixels[y * width + x] = BLACK;
                 } else { // 无信息设置像素点为白色
                     pixels[y * width + x] = WHITE;
                 }
             }
         }
         Bitmap bitmap = Bitmap.createBitmap(width, height,
                 Bitmap.Config.ARGB_8888);
         bitmap.setPixels(pixels, 0 , width, 0 , 0 , width, height);
         return bitmap;
     }
     
     public static Bitmap createQRCodeWithLogo(Context context, String str,
             int widthAndHeight) throws WriterException {
         QRCodeWriter writer = new QRCodeWriter();
         Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
         hints.put(EncodeHintType.CHARACTER_SET, "utf-8" );
         BitMatrix bitMatrix = new QRCodeWriter().encode(str,
                 BarcodeFormat.QR_CODE, widthAndHeight, widthAndHeight, hints);
         int [] pixels = new int [widthAndHeight * widthAndHeight];
 
         Bitmap[] bitmaps = new Bitmap[ 2 ];
         bitmaps[ 1 ] = BitmapFactory.decodeResource(context.getResources(),
                 R.drawable.qrcode_logo); // logo图标
         int imageW = bitmaps[ 1 ].getWidth();
         int imageH = bitmaps[ 1 ].getHeight();
         int startW = widthAndHeight / 2 - imageW / 2 ;
         int starH = widthAndHeight / 2 - imageH / 2 ;
         for ( int y = 0 ; y < widthAndHeight; y++) {
             for ( int x = 0 ; x < widthAndHeight; x++) {
                 if ((x <= startW || x >= starH + imageW)
                         || (y <= starH || y >= +imageH)) {
                     if (bitMatrix.get(x, y)) {
                         pixels[y * widthAndHeight + x] = BLACK;
                     }
                 } else {
                 }
             }
         }
 
         Bitmap bitmap = Bitmap.createBitmap(widthAndHeight, widthAndHeight,
                 Bitmap.Config.ARGB_8888);
 
         bitmap.setPixels(pixels, 0 , widthAndHeight, 0 , 0 , widthAndHeight, widthAndHeight);
 
         bitmaps[ 0 ] = bitmap;
 
         Bitmap bm = combineBitmaps(bitmaps, startW, starH);
         return bm;
     }
 
     private static Bitmap combineBitmaps(Bitmap[] bitmaps, int w, int h) { // 添加logo
         Bitmap newBitmap = Bitmap.createBitmap(bitmaps[ 0 ].getWidth(),
                 bitmaps[ 0 ].getHeight(), Config.ARGB_8888);
         Canvas cv = new Canvas(newBitmap);
 
         for ( int i = 0 ; i < bitmaps.length; i++) {
             if (i == 0 ) {
                 cv.drawBitmap(bitmaps[ 0 ], 0 , 0 , null );
             } else {
                 cv.drawBitmap(bitmaps[i], w, h, null );
             }
             cv.save(Canvas.ALL_SAVE_FLAG);
             cv.restore();
         }
         return newBitmap;
     }
     
     public static Bitmap gerateLogoCode(Context context, String str,
             int widthAndHeight) throws WriterException{
         if (!TextUtils.isEmpty(str)){
             //根据字符串生成二维码图片并显示在界面上,第二个参数为图片的大小(600*600)
             Bitmap qrCodeBitmap = createQRCode(str, widthAndHeight);
             
             //------------------添加logo部分------------------//
             Bitmap logoBmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.qrcode_logo);
             
             //二维码和logo合并
             Bitmap bitmap = Bitmap.createBitmap(qrCodeBitmap.getWidth(), qrCodeBitmap
                     .getHeight(), qrCodeBitmap.getConfig());
             Canvas canvas = new Canvas(bitmap);
             //二维码
             canvas.drawBitmap(qrCodeBitmap, 0 , 0 , null );
             //logo绘制在二维码中央
             canvas.drawBitmap(logoBmp, qrCodeBitmap.getWidth() / 2
                     - logoBmp.getWidth() / 2 , qrCodeBitmap.getHeight()
                     / 2 - logoBmp.getHeight() / 2 , null );
             return bitmap;
         }
         return null ;
     }
}

4、微信自定义分享回调

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class WXEntryActivity extends WXCallbackActivity{
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
     }
     
     //微信发送的请求将回调到onReq方法
     @Override
     public void onReq(BaseReq req) {
         super .onReq(req);
//      ToastUtils.showTextToast(this, "WXEntryActivity onReq");
         System.out.println( "WXEntryActivity onReq" );
     }
     
     //发送到微信请求的响应结果将回调到onResp方法
     @Override
     public void onResp(BaseResp resp) {
         super .onResp(resp);
//      ToastUtils.showTextToast(this, "WXEntryActivity onResp");
         System.out.println( "WXEntryActivity onResp" );
     }
     
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值