结果发现圆角有了,阴影却并没有出来。。。
于是发现,是因为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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)