zoukankan      html  css  js  c++  java
  • 友盟自定义分享-生成带图片的二维码,自定义分享布局

    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");
        }
         
    }

     

     

  • 相关阅读:
    【bzoj4399】魔法少女LJJ 并查集+权值线段树合并
    【bzoj4059】[Cerc2012]Non-boring sequences 分治
    【bzoj4390】[Usaco2015 dec]Max Flow LCA
    【bzoj4127】Abs 树链剖分+线段树
    【bzoj1222】[HNOI2001]产品加工 背包dp
    【bzoj4966】总统选举 随机化+线段树
    protected internal == internal
    框架的一点小随笔
    WPF 的 数据源属性 和 数据源
    Python 运算符重载
  • 原文地址:https://www.cnblogs.com/xgjblog/p/4613833.html
Copyright © 2011-2022 走看看