attrs.xml
。但是我又不会写。于是又翻山越岭,然后在:http://blog.csdn.net/xiaanming/article/details/42833893 里面看到了他写了一个attrs.xml
刚好有一个设置边框的属性。于是我就将那个抄下来。然后结合上一个自定义ImageView,果然ok了。attrs.xml
<resources>
<declare-styleable name="SingleTouchView">
<attr name="frameColor" format="color" />
declare-styleable>
resources>
接着就是自定义的ImageView
了
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.ImageView;
import com.zyitong.MobGuard_Pad.R;
@SuppressLint("DrawAllocation")
public class BorderImageView extends ImageView {
private static final int DEFAULT_FRAME_COLOR = 0xff0000;
private int frameColor;
public BorderImageView(Context context, AttributeSet attrs) {
super(context, attrs);
obtainStyledAttributes(attrs);
}
/**
* 获取自定义属性
*
* @param attrs
*/
private void obtainStyledAttributes(AttributeSet attrs) {
TypedArray mTypedArray = getContext().obtainStyledAttributes(attrs,
R.styleable.SingleTouchView);
frameColor = mTypedArray.getColor(
R.styleable.SingleTouchView_frameColor, DEFAULT_FRAME_COLOR);
mTypedArray.recycle();
}
/*
* (non-Javadoc) @see
* android.widget.ImageView#onDraw(android.graphics.Canvas)
*/
@SuppressLint("DrawAllocation")
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 画边框
Rect rec = canvas.getClipBounds();
rec.bottom--;
rec.right--;
Paint paint = new Paint();
paint.setColor(frameColor);
paint.setStyle(Paint.Style.STROKE);
canvas.drawRect(rec, paint);
}
}
题外话:这个自定义的ImageView我也算是看懂了,就是将画笔放在控件的右下角,然后一点一点往左上角画,至于为什么没有画满控件,而是只是画了边框,倒是没有明白。
然后就是在自己的布局文件里面去使用了:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:duck="http://schemas.android.com/apk/res/com.aaa.bbb"
android:id="@+id/item_lay1_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" >
<com.aaa.bbb.ui.BorderImageView
android:id="@+id/item_lay1_iv"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_gravity="center"
android:layout_margin="0.1dp"
android:contentDescription="@null"
android:minHeight="50dp"
android:minWidth="50dp"
android:scaleType="centerCrop"
android:src="@drawable/bj_qq"
android:padding="2dp"
duck:frameColor="@color/grey" />
<CheckBox
android:id="@+id/item_lay1_cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:clickable="false"
android:visibility="gone" />
RelativeLayout>
<ProgressBar
android:id="@+id/img_pb"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="2dp"
android:background="@drawable/btn_head" />
LinearLayout>
LinearLayout>
注意:xmlns:duck="http://schemas.android.com/apk/res/com.aaa.bbb"
这里面的com.aaa.bbb
一定是当前应用的包名,否则没效果,或者直接报错。
通过以上3步,就算是圆满完成了给ImageView设置一个边框了。至于怎么控制边框的宽度,可能还需要去设置一下画笔的宽度,这个就不是很了解了。