直接在屏幕上,选取区域进行截屏分享到QQ、微信
来源:互联网 发布:数据安全 编辑:程序博客网 时间:2024/06/07 21:43
在手机屏幕上,选择某个区域进行截屏。
- 1,借用网络上一张图片,说明每个点的位置,主要是左上角和右下角这两个点。中间那块浅蓝色的就是我们的目标区域了
/** * 将一个view保存成图片 * @param view 传入的目标view * @return */ public static Bitmap loadBitmapFromView(View view) { view.setDrawingCacheEnabled(true); view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); view.setDrawingCacheBackgroundColor(Color.WHITE); int w1 = view.getLeft(); int h1 = view.getTop(); //int w2 = view.getWidth()+view.getLeft(); //int h2 = view.getHeight()+view.getTop(); //相当于上面的 int w2 = view.getRight(); int h2 = view.getBottom(); //w2-w1, h2-h1这个两个参数要注意一下,要不图片的背景色和图片的大小不一 Bitmap bmp = Bitmap.createBitmap(w2-w1, h2-h1,Bitmap.Config.ARGB_8888); Canvas c = new Canvas(bmp); c.drawColor(Color.WHITE); /** 如果不设置canvas画布为白色,则生成透明 */ view.layout(w1, h1, w2, h2); view.draw(c); return bmp; }
- 2,接下来就是保存我们第一步截出来的图片
/** * 保存图片到本地 * */ public void saveBitmap(Context context, Bitmap bitmap) { String sdCardDir = Environment.getExternalStorageDirectory() + "/DCIM/"; File appDir = new File(sdCardDir, "cache");//文件夹名称 if (!appDir.exists()) { appDir.mkdir(); } //文件名,这里你是如果要保存到本地,每次保存的图片的名称都得不一样 //文件名加一个当前时间就好:System.currentTimeMillis() String fileName = "InvitationCard_" + "chuangqi.jpg"; mFile = new File(appDir, fileName); try { FileOutputStream fos = new FileOutputStream(mFile); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Log.d("Tag-----", appDir+fileName);//这里做一个简单的打印 }
3,接下来就是分享图片,这里用的是开放平台上的SDK,只做关键代码的分析。不是友盟和sharesdk的
- 微信
/** * 邀请卡的分享 * 微信、朋友圈分享 * @param flag 0是分享给微信好友,1是分享到朋友圈 */ public void shareCard(int flag) { waitDialog.show(); if (!wxApi.isWXAppInstalled()) { Toast.makeText(this, "您还未安装微信客户端", Toast.LENGTH_SHORT).show(); waitDialog.dismiss(); return; } Bitmap thumb = null; /* *主要路径尽量主要写,不能直接写死,因为不用手机保持时的路径有所不同,下面两个就是例子 */storage/sdcard0/DCIM/cacheInvitationCard_chuangqi.png */storage/emulated/0/DCIM/cacheInvitationCard_chuangqi.jpg */ File file = new File(Environment.getExternalStorageDirectory()+"/DCIM/cache/InvitationCard_chuangqi.jpg"); if (file.exists()){ thumb = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/DCIM/cache/InvitationCard_chuangqi.png"); } WXImageObject imageObject = new WXImageObject(thumb); WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = imageObject; msg.title = "标题"; msg.description = "描述"; SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("image/*");//请求的唯一标识 req.message = msg; req.scene = flag == 0 ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline; boolean fla = wxApi.sendReq(req); waitDialog.dismiss(); //测试用的,通过下面标记fla判断是否能调起客户端,true就是可以 //Toast.makeText(this, "微信客户端"+"fla=" + fla, Toast.LENGTH_SHORT).show(); }使用: //分享到微信好友 shareCard(0); //分享到微信朋友圈 shareCard(1);
/** * 邀请卡的分享 * 微信分享在activity中写 * 分享到QQ * @param type 1是分享给好友,2是分享到QQ空间 */ public void shareQQCard(int type) { if (!SystemUtils.checkMobileQQ(BaseActivity.this)) { Toast.makeText(BaseActivity.this, "您还未安装QQ客户端", Toast.LENGTH_SHORT).show(); return; } Bundle params = new Bundle(); params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "应用名称"); params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, Environment.getExternalStorageDirectory()+"/DCIM/cache/InvitationCard_chuangqi.png"); params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE); if (type == 1) { params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN); } mTencent.shareToQQ(BaseActivity.this, params, new BaseUiListener()); //Log.d("Tags-", imagePath); //Toast.makeText(this, "QQ客户端"+"type=" + type, Toast.LENGTH_SHORT).show(); }使用: //分享到微信好友 shareQQCard(1); //分享到微信朋友圈 shareQQCard(2);
- 还有一种相当简单的分享方式,直接调起客户端。下面是微信的,没有安装客户端可能程序会奔溃,所以最好先判断一下是否已经安装了客户端
//直接用微信给我们留的分享界面,注意这个路径,在存储时打印就知道了Uri imageUri = Uri.fromFile(new File("/storage/sdcard0/DCIM/cache/InvitationCard_chuangqi.png"));Intent shareIntent = new Intent();ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");//包名和界面的路径,这个是分享给微信好友的//ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");//包名和界面的路径,这个是分享给微信朋友圈shareIntent.setComponent(comp);shareIntent.setAction(Intent.ACTION_SEND);shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);shareIntent.setType("image/*");startActivity(Intent.createChooser(shareIntent, "分享图片"));
不过这种简单的方式,不知道如何监听它的回调(分享成功、失败、取消),如果有知道请也告诉我一下,虚心求教!
部分手机分享失败(华为6.0以上的手机),需要动态请求权限,参考下面这个:
- 动态申请权限:http://blog.csdn.net/qq_32519693/article/details/74936847
阅读全文
0 0
- 直接在屏幕上,选取区域进行截屏分享到QQ、微信
- 微信,QQ, 分享
- ios使用友盟分享到QQ/微信时时如何判断手机上是否安装了QQ以及微信的客户端
- 微信JS-SDK实现自定义分享功能,分享给朋友,分享到QQ,分享到微博
- 分享到QQ,微信,微博等
- 微信公众平台-微信发送朋友、分享到QQ、分享QQ空间、分享腾讯微博-JSSDk接口
- Android中把图片分享到QQ、微信等
- H5app应用调用shareSDK分享到qq,微信,微博
- 百度代码分享到QQ、微信、人人网等
- 安卓分享到QQ好友 QQ空间 微信好友 微信朋友圈 新浪微博分享
- QQ和微信分享
- 微信QQ分享回话
- js微信、qq分享
- shareSDK qq 微信分享
- 微信,QQ分享插件
- QQ、微信分享总结
- Android微信、QQ等分享,无需申请key,通过Intent进行分享。
- 在微信公众平台前端网页上添加分享到朋友圈,关注微信等按钮
- Java 利用 DES / 3DES / AES 三种算法分别实现 对称加密
- 指针
- vue-awesome打包报错
- 复杂网络MATLAB工具箱
- python解析xml
- 直接在屏幕上,选取区域进行截屏分享到QQ、微信
- WebView踩坑(一),load()加载数据出现乱码
- Java学习笔记-《Java程序员面试宝典》-第四章基础知识-4.1基本概念(4.1.8-4.1.9)
- python list用法
- POJ 3020 Antenna Placement 匈牙利算法
- Ajax基础与运用
- 深入理解javascript原型和闭包(8)——简述【执行上下文】上
- 关于网络协议封装的一些新想法
- vs2015 + EasyX loadimage()用法,和把图片添加为项目资源