主要实现:点击button之后数字和自定义圆的大小一直增加,后期可以拖动。
建一个attrs的xml(内容如下):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="radio" format="integer"/>
<attr name="Mywidth" format="integer"/>
<declare-styleable name="CustomView">
<attr name="radio"/>
<attr name="Mywidth"/>
</declare-styleable>
</resources>
自定义view的类CustomView:
public class CustomView extends GridView {
private int index = 0;
private int radio;
private int mywidth;
public CustomView(Context context) {
this(context, null);
}
public CustomView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
//改变角度和text(就是数字)
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0);
int n = a.getIndexCount();
for (int i = 0; i < n; i++) {
int attr = a.getIndex(i);
switch (attr) {
case R.styleable.CustomView_radio:
radio = a.getInteger(attr, 0);
break;
}
}
a.recycle();
}
public CustomView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//画笔paint(圆的)
Paint paint = new Paint();
paint.setColor(Color.RED);
//数字
Paint paint1 = new Paint();
paint1.setColor(Color.GREEN);
paint1.setTextSize(50);
Paint paint2 = new Paint();
paint2.setColor(Color.YELLOW);
//空心的
paint2.setStyle(Paint.Style.STROKE);
//圆的宽度
paint2.setStrokeWidth(mywidth);
canvas.drawCircle(300f, 300, radio, paint);
canvas.drawText(index + "", 230f, 300f, paint1);
canvas.drawCircle(300f, 300, 130, paint2);
}
public void setInteger(int radio) {
this.radio = radio;
}
public void setText(int text) {
this.index = text;
}
private int lastX = 0;
private int lastY = 0;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
if (index == 100){
int dx = (int) event.getRawX() - lastX;
int dy = (int) event.getRawY() - lastY;
int left = getLeft() + dx;
int top = getTop() + dy;
int right = getRight() + dx;
int bottom = getBottom() + dy;
layout(left, top, right, bottom);
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
}
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return true;
}
}
activity-main类的代码
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn"
android:text="点击"
/>
<com.bwie.myweektest.CustomView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:id="@+id/cv"
app:Mywidth="30"
app:radio="10"
>
</com.bwie.myweektest.CustomView>
Mainactivity类
public class MainActivity extends AppCompatActivity {
private CustomView cv;
private Button button;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
cv.setInteger(25);
cv.invalidate();
break;
case 2:
cv.setInteger(50);
cv.invalidate();
break;
case 3:
cv.setInteger(75);
cv.invalidate();
break;
case 4:
cv.setInteger(100);
cv.invalidate();
break;
case 5:
cv.setInteger(125);
cv.invalidate();
break;
case 6:
Object obj = msg.obj;
cv.setText((Integer) obj);
cv.invalidate();
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
cv = (CustomView) findViewById(R.id.cv);
button = (Button) findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread() {
@Override
public void run() {
super.run();
for (int i = 1; i < 6; i++) {
try {
for (int j = (20 * i) - 20; j < (20 * i) + 1; j++) {
sleep(50);
Message message = new Message();
message.obj = j;
message.what = 6;
handler.sendMessage(message);
}
handler.sendEmptyMessage(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
});
}
}
就OK了 ^_^。