Android积木之图片的生成和保存

 private fun generationPic(callback: (response: List<ScreenShotResponse>) -> Unit) {


        Observable.just(selectList)
                .map {
                    val response = ArrayList<ScreenShotResponse>()
                    for (i in 0 until selectList.size) {

                        val outMetrics = DisplayMetrics()
                        windowManager.defaultDisplay.getMetrics(outMetrics)
                        val widthPixels = outMetrics.widthPixels
                        val heightPixels = widthPixels*814/375

                        var shareOrderView = ShareOrderView(this)
                        shareOrderView.orderItem=selectList[i].orderItem
                        layoutView(shareOrderView,widthPixels,heightPixels)
                        var bitmap = loadBitmapFromView(shareOrderView)
                        if (bitmap == null) {
                            continue
                        }
                        val joinPath = Config.SAVE_REAL_PATH + "share_order_" + System.currentTimeMillis()
                        FileUtil.saveImageToSDCard(bitmap, 100, joinPath)

                        response.add(ScreenShotResponse(joinPath, System.currentTimeMillis(), widthPixels.toLong(), heightPixels.toLong()))
                    }
                    response
                }
//                .toList(shareOrderView)
                .subscribeOn(RxUtils.getSchedulerIO())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe({
                    callback(it)
                }, {
                    it.printStackTrace()
                })
    }

private fun loadBitmapFromView(v: View): Bitmap {
        var w = v.width

        var h = v.height

        var bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888)

        var c = Canvas(bmp)

        c.drawColor(Color.WHITE)

        v.layout(0, 0, w, h)

        v.draw(c)
        return bmp
    }


 private fun layoutView(v: View, width: Int, height: Int) {
        // 整个View的大小 参数是左上角 和右下角的坐标
        v.layout(0, 0, width, height)
        val measuredWidth = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY)
        val measuredHeight = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY)
        /** 当然,measure完后,并不会实际改变View的尺寸,需要调用View.layout方法去进行布局。
         * 按示例调用layout函数后,View的大小将会变成你想要设置成的大小。
         */
        v.measure(measuredWidth, measuredHeight)
        v.layout(0, 0, v.measuredWidth, v.measuredHeight)
    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值