android 自用工具方法(二)——文件相关

1、压缩图片

使用系统自带的方法压缩图片,提高图片加载速度,防止图片过大引起OOM,会降低图像质量

private Bitmap imageZoom(Bitmap bitMap) {
        // 图片允许最大空间 单位:KBdoublemaxSize=400.00;
        // 将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大)ByteArrayOutputStreambaos=newByteArrayOutputStream();
        bitMap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] b = baos.toByteArray();
        // 将字节换成KBdoublemid= b.length / 1024;
        // 判断bitmap占用空间是否大于允许最大空间 如果大于则压缩 小于则不压缩if (mid > maxSize) {
            // 获取bitmap大小 是允许最大大小的多少倍doublei= mid / maxSize;
            // 获取这个图片的宽和高floatwidth= bitMap.getWidth();
            floatheight= bitMap.getHeight();
            // 创建操作图片用的matrix对象Matrixmatrix=newMatrix();
            // 计算宽高缩放率floatscaleWidth= ((float) (bitMap.getWidth() / Math.sqrt(i))) / width;
            floatscaleHeight= ((float) (bitMap.getHeight() / Math.sqrt(i))) / height;
            // 缩放图片动作
            matrix.postScale(scaleWidth, scaleHeight);
            bitMap = Bitmap.createBitmap(bitMap, 0, 0, (int) width, (int) height, matrix, true);
        }
        return bitMap;
    }

2、获取网络资源文件大小

        公司有个离谱的需求,需要显示PDF文件大小,正常的逻辑应该是PDF文件上传的时候,后台记录文件大小到数据库里面,前端只做展示。奇葩的是原有的需求里面并没有记录文件大小,公司也不打算加上这个功能,只能前端自己计算文件大小。这个方法实际还是通过网络下载缓存之后计算缓存的大小。需要注意,因为需要异步线程下载文件,所以计算的结果是有延迟的。列表里面使用的话,快速滑动列表会因为异步加载出现文件大小显示错误的情况。


    public static void getNetworkFileSize(TextView textView, String fileUrl) {
        final Handler handler = new Handler(Looper.myLooper()) {
            @Override
            public void handleMessage(Message msg) {
                String fileSize = msg.getData().getString("fileSize");
                textView.setText(fileSize);
            }
        };

        if (fileUrl == null) {
            return;
        }
        if (fileUrl.length() == 0) {
            return;
        }

        URL url = null;
        try {
            url = new URL(fileUrl);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        if (url == null) {
            return;
        }

        final URL finalUrl = url;
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    HttpURLConnection urlConnection = (HttpURLConnection) finalUrl.openConnection();
                    int fileLength = urlConnection.getContentLength();

                    Bundle bundle = new Bundle();
                    bundle.putString("fileSize", formatFileSize(fileLength));

                    Message message = handler.obtainMessage();
                    message.setData(bundle);

                    handler.sendMessage(message);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

3、将View保存为图片

公司需求是制作一个海报,长按界面可以将海报保存到本地。这个方法可以将传入的控件和子控件绘制保存。注意:保存的文件名字要增加一些随机数防止重复,虽然某些手机系统可以在结尾自动追加数字,但是有数量限制,同一个文件夹下同名文件超过一定数量保存时就会报错。

 /**
     *保存图片
     */
    private fun saveImage(view: View) {
        val bitmap = Bitmap.createBitmap(
            view.width, view.height,
            Bitmap.Config.ARGB_8888
        )
        val canvas = Canvas(bitmap)
        view.draw(canvas)
        MediaStore.Images.Media.insertImage(contentResolver,
            bitmap,
            "picture_name" + System.currentTimeMillis().toString(),
            "demo_saveImage")
        ToastUtil.show("保存成功")
    }

4、复制到剪切板

这个功能毕竟常见,比如复制某些口令到某音某宝。公司的需求是分享页面的时候有复制页面连接分享的功能

private fun copyStr(copyStr: String): Boolean {
        return try {
            //获取剪贴板管理器
            val cm: ClipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
            // 创建普通字符型ClipData
            val mClipData: ClipData = ClipData.newPlainText("Label", copyStr)
            // 将ClipData内容放到系统剪贴板里。
            cm.setPrimaryClip(mClipData)
            ToastUtil.show("复制成功")
            true
        } catch (e: java.lang.Exception) {
            false
        }
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值