前一篇关于滑动圆盘的代码,因为没有在手机上测试,代码有些错误,这次做了修正

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);

}

}