본문 바로가기

안드로이드 초보편

커스텀컴포넌트 이벤트 처리 , 볼륨작동

▩ 커스텀컴포넌트 이벤트 처리, 볼륨을 높여라

 

안드로이드는 다양한 기본 위젯을 제공을 한다. Button, TextView, EditText,ListView,CheckBox,

RadioButton,Gallery,Spinner있다.  이 위젯들 중에서도 개발자가 필요로 의해서 직접 View클래스를 상속받아서 위젯을 개발해야 한다. 이것이 커스텀 컴포넌트다.

만약 기존의 위젯을 약간만 변화를 주고 싶으면 위젯을 상속받아서 메소드를 제정의하면 된다.

 

이번 포스트에서는 볼륨을 동작하는 위젯을 만들어 보자!

 

1) 아래 그림과 같이 이미지를 res/drawable 폴더에 저장합니다. 이름은 "knob.png"입니다.

 

 

2>  VolumeControView01 프로젝트를 생성합니다.

3>1번. MainActivity.java 파일이 자동 생성되었을 겁니다.

           VolumeControlView.java  파일을 만듭니다.

    2번. 1) 그림저장된 상태를 나타냅니다.

   

 

    3번. activity_main.xml 코드을 작성합니다.

         < main.volumecontroview01.VolumeControlView  → 커스텀컴포넌트를 사용할 때는

                   android:id ="@+id/volume"

                   android:layout_width="300px"

                   android:layout_height="300px"

                   android:layout_gravity="center"/>

 

4>VolumeContrView01.java 코드를 작성합니다.

    package Kr.co.company.customcomponet;

  

   public class VolumeControlview extends ImaeView implements View.OnTouchListener{

     private double angle = 0.0;

     private knobListener listener;

     float x,y;

     float mx,my;

   

    public interface KnobListener{

           public void onChanged(double angle);

    }

    public void setKnobListener(KnobListener lis){

          listener = list;

    }

    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.0/3.141592;

       return degree;

    }

    public boolean onTouch(View v, MotionEvent event){

       x = event.getX(0);

       y = event.geetY(0);

       angle = getAngle(x,y);

       invalidate();

       listener.onChanged(angle);

       return true;

   }

   protected void onDraw(Canvas c){

      Paint paint = new Paint();

      c.save();

      c.rate(float ) angle.geWidth()/ 2. getHeight()/2;

      super.onDraw(c);

      c.restore();

     }

}

 

5> MainActivitiy.java  코드를 작성합니다.

 

6. 볼륨실행을 아래와 같습니다.

 

   

위의 예저처럼 안드로이드에서 지원되지 않는 위젯을 개발하고자 할때에는 개발자가

직접 View 클래슬 상속받아서 필요한 위젯을 개발할 수 있다.