简介
最近项目里有个类似微信朋友圈的九图控件的需求,Github找了一下,发现都不太满足需求,我需要单张图片的时候可以按照图片宽高比列在一定范围内自适应,而大多开源项目单张图片也是一个小正方形,所以,干脆自己动手写一个
项目源码
具体自定义NineImageLayout过程,可以查看NineImageLayout。
效果图如下:
主要功能如下:
1:单张图片的时候支持按照图片宽高比列在设定区域内自适应
2:Adapter方式绑定数据和UI
3:图片点击事件回调
4:设置图片间隔大小
5:自由通过Glide设置ImageView圆角效果
使用
1:自定义属性如下
<resources>
<declare-styleable name="NineImageLayout">
<!-- 控件宽高 -->
<attr name="nine_layoutWidth" format="dimension"/>
<!-- 单张图片时的最大宽高范围-->
<attr name="nine_singleImageWidth" format="dimension" />
<!-- 图片之间间隙大小 -->
<attr name="nine_imageGap" format="dimension" />
</declare-styleable>
</resources>
2:布局中使用自定义NineImageLayout
<com.cyq.customview.nineLayout.view.NineImageLayout
android:id="@+id/nine_image_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_title"
android:layout_marginTop="20dp"
app:nine_imageGap="4dp"
app:nine_layoutWidth="300dp"
app:nine_singleImageWidth="180dp" />\
3:Adapter方式绑定数据和UI
其中Glide.asBitmap是为了计算图片宽高,如果后台有返回图片的宽高可以省略这一步,直接setSingleImage(width, height,imageView)。
Ps:如果可以建议后台返回图片宽高,这样可以避免单张图片的时候控件高度跳屏,比如我限制单张图片宽高在·200dp·范围,要展示宽1000px高500px的时候,在图片未加载完成时控件宽高为200dp,图片加载完成后高度变为100dp,会有一个不好的用户体验,所以建议上传图片的时候记录图片宽高信息。
nineImageLayout.setAdapter(new NineImageAdapter() {
@Override