微信平台的分享有个很恶心的事情,就是分享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啦