App分享 自定义页面

标签: 二维码 android layout 布局转图片 图片
155人阅读 评论(0) 收藏 举报
分类:

最近在耍分享功能,其实分享无非就是分享图片,文字,图片加文字,别的不常用,就不提及了。

产品脑洞大开想分享大图、文字描述、发表人。然而又想有个特殊标识是俺们公司分享的,你说屌不屌。

当然设计想象力还是挺牛逼的,最终想出了,分享一张图片,内容包含:大图、文字描述、发表人、二维码、公司logo。

说这么多,不如来张效果图

效果图

实现步骤:

一、XML布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              android:orientation="vertical">

    ...

</LinearLayout>

这么简单的布局,还要你上代码,阔笑。

二、布局变身–> 图片

关键代码,其它都是布局填充内容而已

Bitmap result = Bitmap.createBitmap(view.getWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(result);
c.drawColor(Color.WHITE);
// Draw view to canvas
view.draw(c);

具体代码:

/**
 * 
 * @param ctx   上下文
 * @param bitmapContent 中间大图
 * @param contentStr    二维码中的文字内容
 * @param bitmapUserImg     用户头像
 * @param userName  用户昵称
 * @return
 */
public static Bitmap createShareBitmap(Context ctx, Bitmap bitmapContent, String contentStr,
                                       Bitmap bitmapUserImg, String userName){
    View view = LayoutInflater.from(ctx).inflate(R.layout.share_look_layout, null);
    ((ImageView) view.findViewById(R.id.iv)).setImageBitmap(bitmapContent);
    QRCodeUtils qrCodeUtils = QRCodeUtils.getInstance();
    Bitmap qrBitmap = qrCodeUtils.generateBitmap(contentStr, 400, 400);
    Bitmap resultBitmap = qrCodeUtils.addLogo(qrBitmap, ctx, R.mipmap.ic_launcher);
    ((ImageView) view.findViewById(R.id.iv_qr)).setImageBitmap(resultBitmap);
    ((CustomCircleImage) view.findViewById(R.id.iv_userImg)).setImageBitmap(bitmapUserImg);
    ((TextView) view.findViewById(R.id.tv_userName)).setText(userName);


    Point point = getRealScreenSize(ctx);
    view.layout(0, 0, point.x, point.y);
    view.measure(View.MeasureSpec.makeMeasureSpec(point.x, View.MeasureSpec.EXACTLY),
            View.MeasureSpec.makeMeasureSpec(point.y, View.MeasureSpec.AT_MOST));
    view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
    Bitmap result = Bitmap.createBitmap(view.getWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(result);
    c.drawColor(Color.WHITE);
    // Draw view to canvas
    view.draw(c);

    return result;
}


/**
 * 获取屏幕分辨率
 * @param ctx
 * @return
 */
public static Point getRealScreenSize(Context ctx) {
    Point screenSize = null;
    try {
        screenSize = new Point();
        WindowManager windowManager = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
        Display defaultDisplay = windowManager.getDefaultDisplay();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            defaultDisplay.getRealSize(screenSize);
        } else {
            try {
                Method mGetRawW = Display.class.getMethod("getRawWidth");
                Method mGetRawH = Display.class.getMethod("getRawHeight");
                screenSize.set(
                        (Integer) mGetRawW.invoke(defaultDisplay),
                        (Integer) mGetRawH.invoke(defaultDisplay)
                );
            } catch (Exception e) {
                screenSize.set(defaultDisplay.getWidth(), defaultDisplay.getHeight());
                e.printStackTrace();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return screenSize;
}

如果你分享的内容不满整屏,那么给你画个重点。将布局高度设置为最终测量的高度即可

view.layout(0, 0, point.x, point.y);
view.measure(View.MeasureSpec.makeMeasureSpec(point.x, View.MeasureSpec.EXACTLY),
        View.MeasureSpec.makeMeasureSpec(point.y, View.MeasureSpec.AT_MOST));
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
Bitmap result = Bitmap.createBitmap(view.getWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);

附上本文二维码生成地址>>二维码生成秘籍

查看评论

Android友盟社会化分享 自定义分享页面

Android友盟社会化分享 自定义分享页面
  • u011106915
  • u011106915
  • 2016-08-02 17:08:41
  • 3375

手机QQ访问时,html页面在QQ中自定义预览和自定义分享

有一天,产品说要做个自定义预览和分享功能,于是很快在微信上实现了,可是不知道在QQ上怎么实现,查看了很多网站,最后才找到了解决方案,于是想和大家分享一下。...
  • u012386311
  • u012386311
  • 2016-03-08 23:50:01
  • 4147

APP内嵌h5页面如何分享到微信?

一个APP内嵌入H5页面,H5页面有个分享微信的按钮,点击这个按钮可以将这个H5页面分享到微信。从技术上看可行吗?...
  • lieweihan0913
  • lieweihan0913
  • 2017-09-25 22:16:28
  • 1494

qq. 微信分享出去的页面。如何唤起app,调到指定的页面

URL Scheme是iOS,Android平台都支持,只需要原生APP开发时注册scheme, 那么用户点击到此类链接时,会自动唤醒APP,借助于URL Router机制,则还可以跳转至指定页面...
  • liu13722785488
  • liu13722785488
  • 2017-04-14 17:34:00
  • 4200

APP内嵌h5页面,这个H5页面如何分享到微信?

最近在做 jst  app 的商城,全部是webview 页面,商品详情页面的分享,不知道该怎么分享到微信好友和微信朋友圈。找了一下想到几种解决方案,在此分析一下各方案的利弊。 1.调用微信公开的j...
  • dongyang0311
  • dongyang0311
  • 2016-06-22 10:25:50
  • 11681

微信自定义分享页面接口开发

微信自定义分享接口
  • DXB601
  • DXB601
  • 2017-08-08 15:14:07
  • 292

ionic android app 微信/朋友圈分享网页

appionic框架/cordova/phonegap 安卓android平台 插件https://github.com/xu-li/cordova-plugin-wechat创建一个ionic安...
  • lucy_100
  • lucy_100
  • 2015-11-06 17:53:38
  • 2270

iOS自定义分享 (一)分享组件的接入

前言在项目开发中,很多时候需要用到分享的功能。对于新手来说,分享是一个比较棘手的问题。并不是因为分享很难做,只是流程较多,第一次接触难免会出错,只要一个步骤错了,就无法继续下去。在这里对于几种常见的分...
  • u010545480
  • u010545480
  • 2016-02-29 18:05:13
  • 1010

js点击分享打开app

网上很多都不能正确的打开,要不就是打开app同时打开下载。终于整理好了,希望对大家有帮助...
  • GT219
  • GT219
  • 2016-10-10 16:47:32
  • 1722

利用新版ShareSDK进行手动分享(自定义分享界面)

之前有用过Share SDK进行快捷分享,可是官方demo中的快捷分享的界面已经设置死了,而公司的产品又设计了自己的分享界面,这就需要我进行手动分享了。当前ShareSDK版本是2.5.4。 看...
  • happyrabbit456
  • happyrabbit456
  • 2015-06-25 18:20:31
  • 1559
    个人资料
    等级:
    访问量: 4万+
    积分: 318
    排名: 24万+
    最新评论
    底部跑马灯