//圆形头像
public class CircleHeaderView extends android.support.v7.widget.AppCompatImageView {
private int radius;
public CircleHeaderView(Context context) {
super(context);
}
public CircleHeaderView(Context context, AttributeSet attrs) {
super(context, attrs);
}
//测量 测量自定义view的宽高
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = getMeasuredWidth();
int height = getMeasuredHeight();
//
radius = Math.min(width, height)/2;
}
//布局
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
}
//绘制
@Override
protected void onDraw(Canvas canvas) {
//super.onDraw(canvas);
Paint paint = new Paint();
float mScale = 1;
BitmapDrawable drawable = (BitmapDrawable) getDrawable();
if (drawable!=null){
Bitmap bitmap = drawable.getBitmap();
BitmapShader shader = new BitmapShader(bitmap,Shader.TileMode.CLAMP,Shader.TileMode.CLAMP);
mScale = (radius * 2.0f) / Math.min(bitmap.getHeight(), bitmap.getWidth());
Matrix matrix = new Matrix();
matrix.setScale(mScale, mScale);
shader.setLocalMatrix(matrix);
paint.setShader(shader);
// paint.setColor(getResources().getColor(R.color.colorPrimaryDark));
canvas.drawCircle(radius,radius,radius,paint);
}else{
super.onDraw(canvas);
}
}
}
//圆球移动 渐变变色
//bean
public class Bean {
private float positionX;
private float positionY;
private float raduis = 100;
public float getPositionX() {
return positionX;
}
public void setPositionX(float positionX) {
this.positionX = positionX;
}
public float getPositionY() {
return positionY;
}
public void setPositionY(float positionY) {
this.positionY = positionY;
}
public float getRaduis() {
return raduis;
}
public void setRaduis(float raduis) {
this.raduis = raduis;
}
}
//自定义圆形
public class MyView extends View implements View.OnClickListener {
private Paint paint;
private Bean bean;
public MyView(Context context) {
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
initData();
}
int red = 0;
int green = 200;
int blue = 200;
public void setBlue(int blue) {
this.blue = blue;
}
public void setGreen(int green) {
this.green = green;
}
public void setRed(int red) {
this.red = red;
}
private void initData() {
bean = new Bean();
paint = new Paint();
//paint.setColor(Color.BLUE);
paint.setColor(Color.argb(255,red,green,blue));
setOnClickListener(this);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setColor(Color.argb(255,red,green,blue));
canvas.drawCircle(bean.getPositionX()+100,bean.getPositionY()+100,bean.getRaduis(),paint);
}
@Override
public void onClick(View v) {
startAnimation();
Log.e("myMessage","onClick");
}
private void startAnimation() {
AnimatorSet animatorSet = new AnimatorSet();
ObjectAnimator objectAnimatorX = ObjectAnimator.ofFloat(bean, "positionX", 0, 570);
objectAnimatorX.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
invalidate();
}
});
ObjectAnimator objectAnimatorY = ObjectAnimator.ofFloat(bean, "positionY", 0, 1030);
ObjectAnimator objectAnimatorColor = ObjectAnimator.ofInt(this,"green",0,255);
animatorSet.play(objectAnimatorX).with(objectAnimatorY).with(objectAnimatorColor);
animatorSet.setDuration(5000);
animatorSet.start();
}
}
//xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<gxq.com.jb.MyView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</android.support.constraint.ConstraintLayout>```