同时设置圆角和阴影

同时设置圆角和阴影,第1张

先说一下ImageView吧,开始的时候因为我没有拿到UI切图,所以先给它设置了一个背景颜色,然后设置了圆角和阴影

结果发现圆角有了,阴影却并没有出来。。。

于是发现,是因为layer的masksToBounds设置成true导致把它范围之外的部分给裁剪掉了,所以阴影也被干掉了,于是我把masksToBounds的设置去掉了(默认为false)

结果发现圆角和阴影就都有了

然而事情并没有结束,因为当UI切图出来之后,我设置了一张图片,结果发现圆角又没有了。。。

在这个imageView的下边添加一个底部视图,位置约束跟imageView相同,用来专门设置阴影效果,然后把imageView添加到底部视图上,最后给imageView设置圆角(这次要把masksToBounds设置成true)

圆角和阴影终于出来了:

同理,按钮也是一样的情况,如果只给按钮设置了backgroundColor,并不会有按压效果,如果要有按压效果,就要给button设置BackgroundImage及相应的UIControlState

但是设置之后,效果就如同imageView上述情况一样了,同样解决方法也用以上方法就能搞定。

除了以上这个方法添加view之外,好像也可以添加layer来实现,但是因为layer无法设置约束,还要到viewDidLayoutSubviews方法中设置frame,所以就放弃了。

重写ImageView

public class HKImageView extends ImageView {

public HKImageView(Context context, AttributeSet attrs) {

super(context, attrs, 0)

}

public HKImageView(Context context) {

super(context)

}

@Override

protected void onDraw(Canvas canvas) {

Log.d("lg", "onDraw")

super.onDraw(canvas)

// 画边框

Rect rect1 = getRect(canvas)

Paint paint = new Paint()

paint.setColor(Color.GRAY)

paint.setStyle(Paint.Style.STROKE)

// 画边框

canvas.drawRect(rect1, paint)

paint.setColor(Color.LTGRAY)

// 画一条竖线,模拟右边的阴影

canvas.drawLine(rect1.right + 1, rect1.top + 2, rect1.right + 1,

rect1.bottom + 2, paint)

// 画一条横线,模拟下边的阴影

canvas.drawLine(rect1.left + 2, rect1.bottom + 1, rect1.right + 2,

rect1.bottom + 1, paint)

// 画一条竖线,模拟右边的阴影

canvas.drawLine(rect1.right + 2, rect1.top + 3, rect1.right + 2,

rect1.bottom + 3, paint)

// 画一条横线,模拟下边的阴影

canvas.drawLine(rect1.left + 3, rect1.bottom + 2, rect1.right + 3,

rect1.bottom + 2, paint)

}

Rect getRect(Canvas canvas) {

Rect rect = canvas.getClipBounds()

rect.bottom -= getPaddingBottom()

rect.right -= getPaddingRight()

rect.left += getPaddingLeft()

rect.top += getPaddingTop()

return rect

}

}

使用

要给图片添加padding才有效果

imageView.setPadding(3, 3, 5, 5)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11755437.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存