[목표]
Activity 에 ImageView를 추가하고, ImageView를 클릭했을 때, onTouch 이벤트를 받는다.
이벤트는  ACTION_DOWN, ACTION_UP, ACTION_MOVE를 받아야 한다.

ImageButton이 아닌, ImageView 를 하나 만든다.

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <imageview
        android:id="@+id/iv_facebook"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@drawable/img_facebook"
        android:contentdescription="@string/todo" >
    </imageview>

</linearlayout>


화면에 보여줄 이미지뷰에 onTouch 리스너를 등록하고 각각의 메시지를 받으면 로그를 찍어본다.
public class OnTouchDemoActivity extends Activity implements OnTouchListener {
    @Override
	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		ImageView ivFacebook = (ImageView) findViewById(R.id.iv_facebook);
		ivFacebook.setOnTouchListener(this);
	}
    
	@Override
	public boolean onTouch(View v, MotionEvent event) {
		
		int action = event.getAction();
		int id = v.getId();
		
		if(action==MotionEvent.ACTION_DOWN) {
			if(id == R.id.iv_facebook) {
				Log.d("TAG", "OnTouch : ACTION_DOWN");
			}
        }
        else if(action==MotionEvent.ACTION_UP){
        	if(id == R.id.iv_facebook) {
        		Log.d("TAG", "OnTouch : ACTION_UP");
    		}
        }
        else if(action==MotionEvent.ACTION_MOVE){
        	if(id == R.id.iv_facebook) {
        		Log.d("TAG", "OnTouch : ACTION_MOVE");
    		}
        }
		return false;
	}
}



[문제점]
이미지 버튼을 아무리 클릭해도, 위와 같이 ACTION_DOWN 메시지만 불려지고, UP, MOVE 메시지는 발생하지 않는다.

[해결책]
ImageView의 속성 중 "clickable"속성을 켠다(On).

ImageView ivFacebook = (ImageView) findViewById(R.id.iv_facebook);
ivFacebook.setOnTouchListener(this);
ivFacebook.setClickable(true);  // If you set this, you can get all the touch-actions
 또는,
<imageview
    android:id="@+id/iv_facebook"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@drawable/img_facebook"
    android:clickable="true"
    android:contentdescription="@string/todo" >
</imageview>


이후에는 DOWN, MOVE, UP 순서로 메시지들이 전달되는 것을 알 수 있다.



[전체소스]
    다운로드 


Posted by 데브로망스

댓글을 달아 주세요

  1. Skarz 2012.04.16 23:54  댓글주소  수정/삭제  댓글쓰기

    오오.. 이런 간단한 문제인데.. 안되었을때 얼마나 답답할까요.
    게시물 담아갑니다 ^^

  2. 드라겐 2014.10.02 16:25  댓글주소  수정/삭제  댓글쓰기

    감사합니다
    한시간동안 왜 안될까 끙끙거리다
    이거보고 한번에 처리했네요

  3. 김병희 2016.10.16 15:27  댓글주소  수정/삭제  댓글쓰기

    고맙습니다.

  4. young 2017.01.12 16:34  댓글주소  수정/삭제  댓글쓰기

    OnTouch()하단부에 return false -> true로 변경하여서 해결 할 수 있습니다
    위의 clickable로 바꾸어 해결하는 방법은 정확한 해결책이 아니에요