为控件设置一个有阴影感的背景图片即可,可以使用shape
在自定义shape中增加一层或多层,并错开,即可显示阴影效果。为增加立体感,按钮按下的时候,只设置一层。我们可以通过top, bottom, right 和 left 四个参数来控制阴影的方向和大小
//自定义两种阴影效果
第一种
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<layer-list>
<item android:left="4dp"歼腔判 android:top="4dp">
<shape>
<solid android:color="#ff58bb52"/>
<corners android:radius="30dip"/>
</shape>
</item>
</layer-list>
</item>
<item>
<layer-list>
<!-- 第一层 -->
<item android:left="4dp" android:top="4dp">
<shape>
<solid android:color="#66000000"/>
<corners android:radius="30dip"/>
<!-- 描边 -->
<stroke android:width="1dp" android:color="#ffffffff"/>
</shape>
</item>
<!-- 第二层 -->
<item android:bottom="4dp" android:right="4dp">
<shape>
<solid android:color="#ff58bb52"/>
<corners android:radius="30dip"/>
<!-- 描边 -->
<stroke android:width="1dp" android:color="#ffffffff"/>
</shape>
</item>
</layer-list>
</item>
</selector>
第二种
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 点击之后 -->
<item android:state_pressed="true">
<layer-list>
<item android:left="4dp" android:top="4dp">
<shape>
<solid android:color="#ff58bb52"/>
<corners android:radius="3dp"/>
</shape>
</item>
</layer-list>
</item>
<!-- 正常状态 -->
<item>
<layer-list>
<!-- 第一层 -->
<item android:left="2dp" android:top="2dp">
<shape>
氏改 <solid android:color="#66000000"/>
<corners android:radius="3dp"/>
</shape>
</item>
<!-- 第二层 -->
<item android:bottom="4dp" android:right="4dp">
<shape>
<solid android:color="#ff58bb52"/>
<corners android:radius="3dp"/>
</shape>
</item>
<!-- 第三层 -->
<item android:bottom="6dp" android:right="6dp">
<shape>
圆历 <solid android:color="#ffcccccc"/>
<corners android:radius="3dp"/>
</shape>
</item>
</layer-list>
</item>
</selector>
设置后的效果图如下
重写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条)