반응형
□ 이벤트처리 방법 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;
}
}
반응형
'안드로이드' 카테고리의 다른 글
[안드로이드] 온도변환기 앱 (1) | 2019.10.12 |
---|---|
[안드로이드] 여론조사앱 (0) | 2019.10.12 |
[안드로이드] 사용자 인터페이스 기초 (0) | 2019.10.07 |
[안드로이드] 안드로이드 기초사항 (0) | 2019.10.07 |
[Android] 멀티 터치 (Multi Touch) (0) | 2019.10.07 |
댓글