package kr.co.company.customcomponent;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
public class VolumeControlView extends ImageView implements View.OnTouchListener {
private int angle = 0;
private KnobListener listener;
float x, y;
float mx, my;
public interface KnobListener {
public void onChanged(int angle);
}
public void setKnobListener(KnobListener lis )
{
listener = lis;
}
public VolumeControlView(Context context) {
super(context);
this.setImageResource(R.drawable.knob);
this.setOnTouchListener(this);
}
public VolumeControlView(Context context, AttributeSet attrs)
{
super(context, attrs);
this.setImageResource(R.drawable.knob);
this.setOnTouchListener(this);
}
private double getAngle(float x, float y)
{
mx = x - (getWidth() / 2.0f);
my = (getHeight() / 2.0f) - y;
double degree = (Math.atan2(mx, my)*180)/Math.PI;
return degree;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
x = event.getX(0);
y = event.getY(0);
angle = (int)getAngle(x, y);
invalidate();
listener.onChanged(angle);
return true;
}
protected void onDraw(Canvas c)
{
Paint paint = new Paint();
c.save();
c.rotate((float)angle, getWidth()/2, getHeight()/2);
super.onDraw(c);
c.restore();
}
}
package kr.co.company.customcomponent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.Toast;
public class CustomComponentActivity extends ActionBarActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
VolumeControlView view = (VolumeControlView)findViewById(R.id.volume);
view.setKnobListener(new VolumeControlView.KnobListener() {
@Override
public void onChanged(int angle) {
Toast t= Toast.makeText(getApplicationContext(),"볼륨크기 : "+String.valueOf(Math.abs(angle)/2),Toast.LENGTH_LONG);
Toast t1= Toast.makeText(getApplicationContext(),"볼륨크기 : 0",Toast.LENGTH_LONG);
if (angle>0)
t.show();// 오른쪽으로 회전
else
t1.show();// 왼쪽으로 회전
t.cancel();
t1.cancel();
}
});
}
}
이 어플은 볼륨놉으로 볼륨을 조절하는 어플로 수치는 볼륨 수치는 0~99까지 하려고하는데요
이걸 그대로 디버깅하면 오른쪽으로 180도 돌리면 90에서 180도를 넘어가면 바로0으로 되게해놨습니다.
어떻게해야 360도를 돌렸을때 99가나오게할까요?ㅜㅜ 제발 도와주십쇼
볼륨함수는 안만들어도 됩니다.