美文网首页
android 在截取指定View的时候坑

android 在截取指定View的时候坑

作者: 枫叶豆腐汤 | 来源:发表于2017-10-28 10:38 被阅读567次

    前言
    有时我们的需求需要取某一个VIew控件中一块区域,但是截屏这个方法是不可行的,因为截屏是整个屏幕都截取下来了,而且又没有达到我们要的效果,我就踩到这个坑了,我是截取整个屏幕然后把他保存下来,会导致有点卡顿,有的会没有,我的很卡。但是今天我又遇到这个需求了,我想要改变一下取View中的区域、同样是根据View的宽高导致很卡,在有的情况下还不能使用,这个一个很大的问题。以下代码是现在我用的截取view代码,在Activity fragment 还是dialog或者PopupWindow都行

    /**
    *截取view
    **/
      public static Bitmap createViewBitmap(View v) {
            Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
                    Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(bitmap);
            v.draw(canvas);
            return bitmap;
        }
    
    

    保存图片

    
      /**
         * @param bitmap
         */
        public static void getBitmap(Bitmap bitmap, String name) {
            if (bitmap != null) {
                try {
                    // 获取内置SD卡路径
                    String sdCardPath = Environment.getExternalStorageDirectory().getPath();
                    // 图片文件路径
                    String filePath = sdCardPath + File.separator + name;
                    imageShare(filePath, 0);
                } catch (Exception e) {
                }
            }
        }
    
    

    分享微信

     /**
         * 分享图片
         * @param imgurl 保存图片路径
         * @param sendtype 区分分享到朋友圈还是好友
         */
        public static void imageShare(String imgurl, int sendtype) {
            final IWXAPI api = WXAPIFactory.createWXAPI(App.getInstance(), Constant.WXID, true);
            File file = new File(imgurl);
            if (!file.exists()) {
                RxToast.error("图片不存在");
            }
            WXImageObject imgObj = new WXImageObject();
            imgObj.setImagePath(imgurl);
            WXMediaMessage msg = new WXMediaMessage();
            msg.mediaObject = imgObj;
            Bitmap bmp = BitmapFactory.decodeFile(imgurl);
            Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 100, 100, true);
            msg.setThumbImage(thumbBmp);
            bmp.recycle();
            SendMessageToWX.Req req = new SendMessageToWX.Req();
            req.transaction = String.valueOf(System.currentTimeMillis());
            req.message = msg;
            req.scene = sendtype == 0 ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline;
            api.sendReq(req);
        }
    

    需要用到的直接按照这个上下顺序复制就能用

    相关文章

      网友评论

          本文标题:android 在截取指定View的时候坑

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