본문 바로가기
안드로이드

[안드로이드]이벤트 처리 방법

by 호아나트 2019. 10. 7.
반응형

□ 이벤트처리 방법 3가지

    ▶ XML파일에 이벤트 처리 메소드를 등록

 

//xml에서 이벤트 메소드 등록
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/android_pressed"
    android:state_pressed="true"/>
    <item android:drawable="@drawable/android_focused"
        android:state_focused="true"/>
    <item android:drawable="@drawable/android_normal"/>
</selector>

     이벤트를 처리하는 객체를 생성하여 이벤트 처리

       - 리스너클래스를 내부클래스에서 정의

public class MainActivity extends AppCompatActivity {
//내부클래스 정의
    class MyListenerClass implements View.OnClickListener{//implements로 View클래스의 OnClickListener 인터페이스 가져오기
    //click 메소드 정의
        public void onClick(View v){
            Toast.makeText(getApplicationContext(),"버튼이 눌려졌습니다",Toast.LENGTH_SHORT).show();
        }
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button =(Button)findViewById(R.id.button);  //button id 호출
        MyListenerClass buttonListener = new MyListenerClass(); //Listener 객체 생성
                button.setOnClickListener(buttonListener);//버튼에 이벤트 리스너 등록
    }
}

       - 리스너클래스를 무명클래스에서 정의

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button =(Button)findViewById(R.id.button);
        //무명클래스 구현
                button.setOnClickListener(
             new View.OnClickListener() {//View 클래스의 OnClickListener 객체 생성 및 등록
                    @Override //이벤트처리 오버라이드
                    public void onClick(View view) {
                        Toast.makeText(getApplicationContext(),"버튼이 눌렸습니다",Toast.LENGTH_SHORT).show();
                    }
                });
    }
}

       - 리스너클래스를 액티비티 클래스에서 정의

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//액티비티에 View.onClickListener 인터페이스 추가

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button =(Button) findViewById(R.id.button);
       button.setOnClickListener(this); //버튼에 클릭이벤트 등록

    }
//버튼 클릭시 메소드 호출
    @Override
    public void onClick (View v)
    {
        Toast.makeText(getApplicationContext(),"버튼이 눌러졌습니다",Toast.LENGTH_SHORT).show();
    }
}

    뷰 클래스의 이벤트 처리 메소드를 재 정의(커스텀뷰 작성)

       - View 클래스를 상속받아 자식클래스 생성

       - 부모클래스(View)의 메소드 재정의

       - JAVA코드에서 View클래스를 객체처럼 사용

//ImageView 상속받아서 자신의 커스텀 컴포넌트 정의
public class MainActivity extends ImageView implements View.OnTouchListener{

    private double angle =0.0f;
    private KnobListener listener;
    float x,y;
    float mx, my;

    public interface KnobListener{
        public void onChanged(double angle);
    }

    public void setKnobListener(KnobListener lis){
        listener =lis;
    }
    public MainActivity(Context context)
    {
        super(context);
        this.setImageResource(R.drawable.knob);
        this.setOnTouchListener(this);

    }
    public MainActivity(Context context,AttributeSet attrs)
    {
        super(context);
        this.setImageResource(R.drawable.knob);
        this.setOnTouchListener(this);

    }
    
    @Override//onTouch 재정의
    public boolean onTouch(View view, MotionEvent event) {
        x= event.getX(0);
        y= event.getY(0);
        angle = getAngle(x,y);
        return false;
    }
}
반응형

댓글