自定义View 可滑动调值的圆环

前一篇关于滑动圆盘的代码,因为没有在手机上测试,代码有些错误,这次做了修正
package com.example.administrator.sildecircle;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
public class SildeCircle extends View {
Canvas canvas;
Context context;
float cx;
float cy;
float r=205;
float downx=0;
float downy=0;
public SildeCircle(Context context, AttributeSet attrs) {
super(context, attrs);
this.context=context;
}
public SildeCircle(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.context=context;
}
public SildeCircle(Context context) {
super(context);
this.context=context;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
this.canvas=canvas;
int w=getWidth();
int h=getHeight();
cx=(float)(w/2+r*(downx-w/2)/(Math.sqrt(Math.pow(h/2-downy,2)+Math.pow(downx-w/2,2))));
cy=(float)(h/2-r*(h/2-downy)/(Math.sqrt(Math.pow(h/2-downy,2)+Math.pow(downx-w/2,2))));
Log.d("onDraw",cx+" "+cy);
myDrawCircle(canvas,w/2,h/2,250,Color.GREEN);
myDrawCircle(canvas,w/2,h/2,160,Color.WHITE);
myDrawCircle(canvas,cx,cy,45,Color.WHITE);
this.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
downx=event.getX();
downy=event.getY();
SildeCircle.this.invalidate();
Log.d("On Touch ",downx+" "+downy);
return true;
}
});
}
private void myDrawCircle(Canvas canvas,float cx,float cy,float radius,int color)
{
Paint paint=new Paint();
paint.setColor(color);
canvas.drawCircle(cx,cy,radius,paint);
}
}