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

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、自定义布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="340dp"
    android:layout_height="340dp"
    android:layout_gravity="center"
    android:background="@color/white" >

    <TextView
        android:id="@+id/tuijian_textview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/top_layout"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="10dp"
        android:background="@android:color/transparent"
        android:text="分享给好友"
        android:textColor="@color/blue_shallow"
        android:textSize="@dimen/font_body_20" />

    <View
        android:id="@+id/line1"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_below="@id/tuijian_textview"
        android:layout_marginTop="10dp"
        android:background="@color/blue_shallow" />

    <ImageView
        android:id="@+id/share_imageview"
        android:layout_width="170dp"
        android:layout_height="170dp"
        android:layout_marginTop="5dp"
        android:layout_below="@+id/line1"
        android:layout_centerHorizontal="true"
        android:scaleType="fitXY" />

	<TextView
	    android:id="@+id/load_saomiao_name"
	    android:layout_width="wrap_content"
	    android:layout_height="26dp"
	    android:layout_below="@+id/share_imageview"
	    android:layout_centerHorizontal="true"
	    android:layout_marginBottom="4dp"
	    android:background="@color/white"
	    android:gravity="center"
	    android:singleLine="true"
	    android:text="扫描二维码,立即下载"
	    android:textColor="@android:color/darker_gray"
	    android:textSize="14sp" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_above="@+id/share_scrollView"
        android:layout_marginTop="10dp"
        android:background="@color/gray_line" />

    <ScrollView
        android:id="@+id/share_scrollView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@android:color/transparent" >

        <LinearLayout
            android:id="@+id/share_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:orientation="horizontal" >

            <RelativeLayout
                android:id="@+id/tencent_layout"
                android:layout_width="wrap_content"
                android:layout_height="80dp"
                android:layout_weight="1"
                android:background="@drawable/umeng_socialize_shareboard_item_background" >

                <ImageView
                    android:id="@+id/tencent_share_image"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="10dp"
                    android:scaleType="fitXY"
                    android:background="@drawable/umeng_socialize_tx_on" />

                <TextView
                    android:id="@+id/tencent_share_name"
                    android:layout_width="wrap_content"
                    android:layout_height="20dp"
                    android:layout_alignParentBottom="true"
                    android:layout_centerHorizontal="true"
                    android:layout_marginBottom="4dp"
                    android:layout_marginLeft="2dp"
                    android:layout_marginRight="2dp"
                    android:background="@android:color/transparent"
                    android:gravity="center"
                    android:singleLine="true"
                    android:text="腾讯微博"
                    android:textSize="12sp"
                    android:textColor="@color/blue_shallow" />
            </RelativeLayout>
			<RelativeLayout
			    android:id="@+id/wx_share_layout"
                android:layout_width="wrap_content"
                android:layout_height="80dp"
                android:layout_weight="1"
                android:background="@drawable/umeng_socialize_shareboard_item_background" >

                <ImageView
                    android:id="@+id/wx_share_image"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="10dp"
                    android:scaleType="fitXY"
                    android:background="@drawable/umeng_socialize_wechat" />

                <TextView
                    android:id="@+id/wx_share_name"
                    android:layout_width="wrap_content"
                    android:layout_height="20dp"
                    android:layout_alignParentBottom="true"
                    android:layout_centerHorizontal="true"
                    android:layout_marginBottom="4dp"
                    android:layout_marginLeft="2dp"
                    android:layout_marginRight="2dp"
                    android:background="@android:color/transparent"
                    android:gravity="center"
                    android:singleLine="true"
                    android:text="微信"
                    android:textSize="12sp"
                    android:textColor="@color/blue_shallow" />
            </RelativeLayout>
            <RelativeLayout
                android:id="@+id/sina_share_layout"
                android:layout_width="wrap_content"
                android:layout_height="80dp"
                android:layout_weight="1"
                android:background="@drawable/umeng_socialize_shareboard_item_background" >

                <ImageView
                    android:id="@+id/sina_share_image"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="10dp"
                    android:scaleType="fitXY"
                    android:background="@drawable/umeng_socialize_sina_on" />

                <TextView
                    android:id="@+id/sina_share_name"
                    android:layout_width="wrap_content"
                    android:layout_height="20dp"
                    android:layout_alignParentBottom="true"
                    android:layout_centerHorizontal="true"
                    android:layout_marginBottom="4dp"
                    android:layout_marginLeft="2dp"
                    android:layout_marginRight="2dp"
                    android:background="@android:color/transparent"
                    android:gravity="center"
                    android:singleLine="true"
                    android:text="新浪微博"
                    android:textSize="12sp"
                    android:textColor="@color/blue_shallow" />
            </RelativeLayout>
            <RelativeLayout
                android:id="@+id/circle_share_layout"
                android:layout_width="wrap_content"
                android:layout_height="80dp"
                android:layout_weight="1"
                android:background="@drawable/umeng_socialize_shareboard_item_background" >

                <ImageView
                    android:id="@+id/circle_share_image"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="10dp"
                    android:scaleType="fitXY"
                    android:background="@drawable/umeng_socialize_wxcircle" />

                <TextView
                    android:id="@+id/circle_share_name"
                    android:layout_width="wrap_content"
                    android:layout_height="20dp"
                    android:layout_alignParentBottom="true"
                    android:layout_centerHorizontal="true"
                    android:layout_marginBottom="4dp"
                    android:layout_marginLeft="2dp"
                    android:layout_marginRight="2dp"
                    android:background="@android:color/transparent"
                    android:gravity="center"
                    android:singleLine="true"
                    android:text="朋友圈"
                    android:textSize="12sp"
                    android:textColor="@color/blue_shallow" />
            </RelativeLayout>
        </LinearLayout>
    </ScrollView>

</RelativeLayout>

3、生成二维码图片

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、微信自定义分享回调

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

}
时间: 2024-10-27 10:43:25

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

Android生成带图片的二维码

一.问题描述 在开发中需要将信息转换为二维码存储并要求带有公司的logo,我们知道Google的Zxing开源项目就很好的帮助我们实现条形码.二维码的生成和解析,但带有logo的官网并没有提供demo,下面就通过实例看看如何实现以及Zxing的使用. 二.案例介绍 1.案例运行效果 2.案例准备工作 在项目中加入jar,只需加入core.jar Zxing项目地址:https://github.com/zxing/zxing/ 三.Zxing主要组件 1.BarcodeFormat 定义了不同的

Android使用ZXing生成带图片的二维码

效果图如下: 制作过程很简单的就是在原始的二维码图片上添加一个logn图标,代码的注释写得很详细,也就不给大家啰嗦了 package com.example.day44_02_qrcodewithlogin; import java.util.HashMap; import java.util.Map; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Bitmap.Confi

PHP生成带logo图像二维码的两种方法

本文主要和大家分享PHP生成带logo图像二维码的两种方法,主要以文字和代码的形式和大家分享,希望能帮助到大家. 一.利用Google API生成二维码Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 $urlToEncode="http://www.php.cn"; generateQRfromGoogle($urlToEncode); /**

微信公众平台功能开发(生成带参数的二维码)

为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送. 目前有2种类型的二维码,分别是临时二维码和永久二维码,前者有过期时间,最大为1800秒,但能够生成较多数量,后者无过期时间,数量较少(目前参数只支持1--100000).两种二维码分别适用于帐号绑定.用户来源统计等场景. 用户扫描带场景值二维码时,可能推送以下两种事件: 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事

.NET使用ZXing.NET生成中间带图片的二维码

很久之前就有写这样的代码了,只是一直没记录下来,偶然想写成博客. 把之前的代码封装成函数,以方便理解以及调用. 基于开源的 ZXing.NET 组件,代码如下: 先添加对ZXing.NET的引用,然后添加相应的命名空间: using System; using System.Collections.Generic; using System.Drawing; using ZXing; using ZXing.Common; using ZXing.QrCode; using ZXing.QrCo

C#微信开发之旅(六):生成带参数的二维码

主要用来推广并统计数据,当用户扫描带参数二维码时,微信会推送消息到我们的服务器,此时可以根据参数了解到用户是从哪个渠道关注的.话不多少,先来代码: 1 #region 生成二维码 2 3 /// <summary> 4 /// 获取Ticket 5 /// </summary> 6 /// <returns></returns> 7 private static string CreateTicket(string scene_id) 8 { 9 var t

C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(一)

一.ZXing.Net 源代码地址:http://zxingnet.codeplex.com/ 也可以使用Nuget包管理,添加如图: 说明:ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME.J2SE和Android.现在也有了对应的.Net版本 二.生成二维码 将字符编码时可以指定字符格式:默认为ISO-8859-1英文字符集,但一般移动设备常用UTF-8字符

涛哥的Python脚本工具箱之生成带Logo的二维码

近期须要在二维码上加Logo,网上没有找到好用的,于是自己用python写了一个. 须要安装qrcode,PIL库 二维码简称 QR Code(Quick Response Code),学名为高速响应矩阵码,是二维条码的一种.由日本的 Denso Wave 公司于 1994 年发明. 现随着智能手机的普及.已广泛应用于寻常生活中,比如商品信息查询.社交好友互动.网络地址訪问等等. 安装 Python 的二维码库 -- qrcode pip install qrcode 因为生成 qrcode 图

.NET生成带Logo的二维码

使用ThoughtWorks.QRCode生成,利用这个库来生成带Logo的二维码(就是中间嵌了一个图片的二维码),直接见代码: HttpContext context = HttpContext.Current; String data = "二维码的内容";//如果是链接会跳转 if (!string.IsNullOrEmpty(data)) { QRCodeEncoder encoder = new QRCodeEncoder(); Bitmap imgBack = encode