作为初学者的我‘, 今天刚学的一个超简单的自定义View,我不是大神,知识小菜鸟,技术不够别嫌弃。
自定义view圆头像步骤:
xml文件配置
<com.example.myviewdemo.CircleView
android:id="@+id/cv"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_centerInParent="true"
android:src="@drawable/ic_launcher"
myapp:border_width="2dp"
myapp:border_color="#ffff0000"
>
</com.example.myviewdemo.CircleView>
value/attrs.xml配置
<resources>
<declare-styleable name="CircleView">
<attr name="border_width" format="dimension"></attr>
<attr name="border_color" format="color"></attr>
</declare-styleable>
</resources>
创建一个类,让他来继承ImageView。
public class CircleView extends ImageView {
int borderWidth;
int borderColor;
/**一般定义两个构造函数就好,单参数或双参数*/
public CircleView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray t=context.obtainStyledAttributes(attrs, R.styleable.CircleView);
borderWidth=t.getDimensionPixelSize(R.styleable.CircleView_border_width, 0);
borderColor=t.getColor(R.styleable.CircleView_border_color,Color.WHITE);
t.recycle();
}
//自定义圆
@Override
public void setImageBitmap(Bitmap bm) {
//tm---xfermode--->bitmap
Bitmap bitmap=Bitmap.createBitmap(bm.getWidth(),bm.getHeight(),Config.ARGB_8888);
Canvas canvas=new Canvas(bitmap);
Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.BLACK);
float radius=Math.min(bm.getWidth(), bm.getHeight())/2;
canvas.drawCircle(bm.getWidth()/2, bm.getHeight()/2,radius,paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bm,0,0, paint);
//空心圆,实现圆边
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(borderWidth);
paint.setColor(borderColor);
canvas.drawCircle(bm.getWidth()/2, bm.getHeight()/2, radius-borderWidth/2, paint);
setScaleType(ScaleType.CENTER);
super.setImageBitmap(bitmap);
}
}
MainActivity中
public class MainActivity extends Activity {
CircleView cv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cv=(CircleView)findViewById(R.id.cv);
Bitmap bm=BitmapFactory.decodeResource(getResources(), R.drawable.b);
cv.setImageBitmap(bm);
}
}