美文网首页
实现微信分享--缩略图

实现微信分享--缩略图

作者: 毹毹 | 来源:发表于2017-06-07 15:06 被阅读1929次

微信平台的分享有个很恶心的事情,就是分享url的时候不支持同时分享他的缩略图(就是只是支持本地图片,网络不可),可是现在很多网页分享都需要拿到他的文章标题和缩略图
那具体我们要怎么实现呢?
1、使用第三方(这个没有细究,可以自己去研究下)
2、保存网络图片在本地bitmap上(今天来介绍第二种)

先用glide获取bitmap
  public static Bitmap getBitmap(final Context context, final String url, final int w, final int h) {
        Bitmap bitmap = null;

        if ("".equals(url) || url == null) {
            return null;
        }
        try {
            bitmap = Glide.with(context)
                    .load(url)
                    .asBitmap() //必须
                    .centerCrop()
                    .into(w, h)
                    .get();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return bitmap;

    }
封装一个CustomThread 类(封装这个主要是为了不让Thread拿到context ,说白了就是为了解耦)
public class CustomThread extends Thread{

    @Override
    public void run() {
        super.run();
        if (listener != null) {
            listener.run();
        }
    }

    public void cancel() {
        interrupt();
    }

    private Listener listener;

    public void addListener(Listener listener) {
        this.listener = listener;
    }

    public interface Listener {
        public void run();
    }
}

还有里边加了一个cancel()方法 是为了任务执行完之后通知系统把线程回收了
新建bitmap对象通过loadShareIcon方法来获取bitmap
  private Bitmap bitmap;

  private void loadShareIcon() {

        final CustomThread thread = new CustomThread();
        thread.addListener(new CustomThread.Listener() {
            @Override
            public void run() {
                bitmap = ImageUtil.getBitmap(DetailForActivity.this,thumb,300,300);
                thread.cancel();//并不意味着立即停止目标线程正在进行的工作,而只是传递了请求中断的消息
            }
        });
        thread.start();
    }
最后再拿到bitmap给微信用来分享
 Bitmap thumb = bitmap;
        Log.i("ls","share1 --" + bitmap);
        Log.i("ls","share2 --" + thumb);

        if(bitmap==null){
            thumb = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
//若是为空就赋值本地图片
        }

        msg.thumbData = Utils.getBitmapBytes(thumb, false);
Utils.getBitmapBytes是bitmap 转换为字节数组
/**
     * bitmap 转换为字节数组
     */
    // 需要对图片进行处理,否则微信会在log中输出thumbData检查错误
    public static byte[] getBitmapBytes(Bitmap bitmap, boolean paramBoolean) {
        Bitmap localBitmap = Bitmap.createBitmap(80, 80, Bitmap.Config.RGB_565);
        Canvas localCanvas = new Canvas(localBitmap);
        int i;
        int j;
        if (bitmap.getHeight() > bitmap.getWidth()) {
            i = bitmap.getWidth();
            j = bitmap.getWidth();
        } else {
            i = bitmap.getHeight();
            j = bitmap.getHeight();
        }
        while (true) {
            localCanvas.drawBitmap(bitmap, new Rect(0, 0, i, j), new Rect(0, 0,
                    80, 80), null);
            if (paramBoolean)
                bitmap.recycle();
            ByteArrayOutputStream localByteArrayOutputStream = new ByteArrayOutputStream();
            localBitmap.compress(Bitmap.CompressFormat.JPEG, 100,
                    localByteArrayOutputStream);
            localBitmap.recycle();
            byte[] arrayOfByte = localByteArrayOutputStream.toByteArray();
            try {
                localByteArrayOutputStream.close();
                return arrayOfByte;
            } catch (Exception e) {
                // F.out(e);
            }
            i = bitmap.getHeight();
            j = bitmap.getHeight();
        }
    }

这样就ok啦

效果图如此

相关文章

网友评论

      本文标题:实现微信分享--缩略图

      本文链接:https://www.haomeiwen.com/subject/cybtfxtx.html