App分享 自定义页面

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

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

当然设计想象力还是挺牛逼的,最终想出了,分享一张图片,内容包含:大图、文字描述、发表人、二维码、公司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);

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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhihui_520/article/details/78354707
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

App分享 自定义页面

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭