当前位置: 首页 > news >正文

关于京东商城网站建设的实践报告seo交流网

关于京东商城网站建设的实践报告,seo交流网,郑州优之客网站建设,怎么做淘宝网站赚钱吗背景 ImageView的scaleType默认显示图片是这样,但是有时候设计稿需求希望图片左右能紧贴着ImageView左右边缘,又不破坏图片的比例,用自带的matrix,centerCrop等都可以满足 但是都会造成图片的某些区域被裁剪了,如果设…

背景

在这里插入图片描述
ImageView的scaleType默认显示图片是这样,但是有时候设计稿需求希望图片左右能紧贴着ImageView左右边缘,又不破坏图片的比例,用自带的matrix,centerCrop等都可以满足
在这里插入图片描述
但是都会造成图片的某些区域被裁剪了,如果设计稿只能接受底部被裁剪,其他边区域正常显示,那系统自带的scaleType则无法满足需求。这时需要自定义新的scaleType来满足设计要求

源码解析

  • 以宽度为基准,计算图片与ImageView的缩放比例
scale = viewWidth.toFloat() / drawableWidth.toFloat()
  • 根据自定义的scale_type,算出图片显示区域,viewHeight / scale为图片显示高度
        var drawableRect: RectF? = nullif (mCropType == FROM_TOP) {drawableRect = RectF(0f, 0f, drawableWidth.toFloat(), viewHeight / scale)} else if (mCropType == FROM_BOTTOM) {drawableRect = RectF(0f,drawableHeight - viewHeight / scale,drawableWidth.toFloat(),drawableHeight.toFloat())}
  • 使用setImageMatrix设置图片绘制边界
val viewRect = RectF(0f, 0f, viewWidth.toFloat(), viewHeight.toFloat())
matrix.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.FILL)
setImageMatrix(matrix)

完整源码

class MatrixImageView @JvmOverloads constructor(context: Context,attrs: AttributeSet? = null,defStyleAttr: Int = 0
) : AppCompatImageView(context, attrs, defStyleAttr) {companion object {const val DEFAULT = 0const val FROM_TOP = 1const val FROM_BOTTOM = 2}private var mCropType = DEFAULTinit {val ta = context.obtainStyledAttributes(attrs, R.styleable.MatrixImageView, 0, 0)mCropType = ta.getInt(R.styleable.MatrixImageView_scale_type, DEFAULT)if (mCropType != DEFAULT) {setScaleType(ScaleType.MATRIX)}ta.recycle()}override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {super.onSizeChanged(w, h, oldw, oldh)if (mCropType != DEFAULT) {setupImageMatrixRect()}}private fun setupImageMatrixRect() {if (getDrawable() == null) {return}val matrix = getImageMatrix()val scale: Floatval viewWidth = width - paddingLeft - paddingRightval viewHeight = height - paddingLeft - paddingRightval drawableWidth = getDrawable().intrinsicWidthval drawableHeight = getDrawable().intrinsicHeightscale = viewWidth.toFloat() / drawableWidth.toFloat()var drawableRect: RectF? = nullif (mCropType == FROM_TOP) {drawableRect = RectF(0f, 0f, drawableWidth.toFloat(), viewHeight / scale)} else if (mCropType == FROM_BOTTOM) {drawableRect = RectF(0f,drawableHeight - viewHeight / scale,drawableWidth.toFloat(),drawableHeight.toFloat())}val viewRect = RectF(0f, 0f, viewWidth.toFloat(), viewHeight.toFloat())matrix.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.FILL)setImageMatrix(matrix)}fun setCropType(@CropType cropType: Int) {if (mCropType != cropType) {mCropType = cropTypesetupImageMatrixRect()invalidate()}}@IntDef(FROM_TOP, FROM_BOTTOM)@Retention(AnnotationRetention.SOURCE)annotation class CropType
}
    <declare-styleable name="MatrixImageView"><attr name="scale_type"><enum name="matrix_top" value="1" /><enum name="matrix_bottom" value="2" /></attr></declare-styleable>

最终效果

在这里插入图片描述

http://www.hengruixuexiao.com/news/50810.html

相关文章:

  • 星月教你做网站网站优化快速排名软件
  • 云优化 网站建设厦门人才网app
  • 电子商务网站建设与管理第四章答案厉害的seo顾问
  • 周口网站推广惠州seo外包服务
  • 武汉做网站互助系统廊坊seo网络推广
  • 网站建设步奏快手作品推广网站
  • 上海网站工作室权重查询入口
  • 网站建设加盟合作最新seo教程
  • 杭州电子网站建设方案有创意的网络营销案例
  • 什么是网络营销网络营销与电商营销有什么区别杭州seo排名
  • 网站怎么做360免费优化营销网络推广方式有哪些
  • 做日用品有什么网站好北京搜索关键词优化
  • WordPress自建图床API广东搜索引擎优化
  • 中国招标与采购网seo推广怎么做视频教程
  • php 可以自己做网站吗互联网广告是做什么的
  • 如何用vps建网站网站发布与推广
  • html5做网站的总结什么样的人适合做策划
  • 做网站的抬头标语怎么做seo接单
  • wordpress有哪些好模版青岛网站seo公司
  • 金融网站建设方案ppt模板app下载注册推广平台
  • 电子商务网站建设教程百度官方优化软件
  • 石家庄新钥匙网站志鸿优化网官网
  • 网站流量站怎么做一份完整的营销策划书
  • 怎么用链接进自己做的网站南京seo代理
  • 个人做啥网站流量大杭州优化外包
  • 牌具做网站目前最新的营销模式有哪些
  • 洛阳网站建设哪家好北京网站优化排名
  • 西安网站优化培训百度站长工具seo查询
  • 网站哪里可以做最新搜索关键词
  • 广西南宁房产网站建设百度搜索引擎网址格式