'생활일기' 카테고리의 다른 글

임보 중인 고양이 ‘솔(Sol)'  (0) 2016.09.06
세계의 건물들  (0) 2014.12.08
실전 HDR의 시작  (0) 2011.04.20
'내 감정 조절법'에 나오는 '벽을 넘는 기술'  (0) 2011.02.03

MainActivity.java에


코드시작package com.actionshin.touchevent;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.FrameLayout;

/**
 * Created by ilsuk on 14. 12. 7..
 */
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 1.뷰그룹을 생성한다.
        CustomViewGroup viewGroup = new CustomViewGroup(this);
        viewGroup.setBackgroundColor(Color.BLUE);
        FrameLayout.LayoutParams viewGroupLp = new FrameLayout.LayoutParams(300, 300);

        // 2.뷰를 생성한다.
        CustomView view = new CustomView(this);
        view.setBackgroundColor(Color.YELLOW);
        FrameLayout.LayoutParams viewLp = new FrameLayout.LayoutParams(150, 150);

        // 3.생성된 뷰를 뷰그룹에 추가한다.
        viewGroup.addView(view, viewLp);

        // 4.콘텐츠 영역에 생성된 뷰그룹을 추가한다.
        setContentView(viewGroup, viewGroupLp);

    }

    /* 액티비티의 dispatchTouchEvent 함수를 재정의한다. */
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        Log.e("shin", "Activity dispatchTouchEvent() >> " + ev.getAction());
        return super.dispatchTouchEvent(ev);
    }

    /* 액티비티의 onTouchEvent 함수를 재정의한다. */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.e("shin", "Activity onTouchEvent() >> " + event.getAction());
        return super.onTouchEvent(event);
    }
}코드끝





노락박스가 뷰그룹이다. 뷰그룹에서 20px이상 move를 하면 뷰에게 전달되는 이벤트를 가로채게 된다.





Log에 찍힌 내용을 보자. 뷰그룹의 onInterceptTouchEvent가 true를 반환하여 이벤트를 가로채고, 자식뷰의 onTouchEvent함수는 ACTION_CANCEL(3)을 전달받게 된다.



'android' 카테고리의 다른 글

this  (0) 2014.12.08
onInterceptTouchEvent함수를 이용해 자식 뷰로 전달되는 이벤트를 가로채기  (0) 2014.12.08
로그 남기기  (0) 2014.12.08
MotionEvent 객체  (0) 2014.12.04
log

Log 레벨은 심각한 정도에 따라 Verbose, Debug, Information, Warning, Error 등 총 5가지 함수로 구분된다.


사용 예



 -v

 다양한 정보를 출력하기 위한 용도

 -d

 문제 발생 시 원인 분석의 기반이 되는 정보를 출력하기 위한 용도

 -i

 각종 클래스 변수의 내용을 확인하기 위한 용도

 -w

 실행 중인 앱이 문제가 발생할 소지가 있음을 알리는 용도

 -e

 실행 중인 앱에 치명적인 에러가 발생했음을 알리는 용도




 

 함수명

설명 

 getAction

 터치 이벤트의 액션값이 전달된다.

 ACTION_DOWN = 0

 ACTION_UP = 1

 ACTION_MOVE = 2

 ACTION_CANCEL = 3

 

MainActivity.java의 코드

 

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

 

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        Log.d("shin","===============================");
        Log.d("shin","dispatchTouchEvent()");
        Log.d("shin","- ActionCode : "+ev.getAction());
        Log.d("shin","- XY Position : "+ev.getX()+","+ev.getY());
        Log.d("shin","- Event Time : "+ev.getEventTime());
        Log.d("shin","- Down Event Time : "+ev.getDownTime());
        return super.dispatchTouchEvent(ev);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.d("shin","===============================");
        Log.d("shin","dispatchTouchEvent()");
        Log.d("shin","- ActionCode : "+event.getAction());
        Log.d("shin","- XY Position : "+event.getX()+","+event.getY());
        Log.d("shin","- Event Time : "+event.getEventTime());
        Log.d("shin","- Down Event Time : "+event.getDownTime());
        return super.onTouchEvent(event);
    }
}

 

 

 

 

 

이벤트의 전달과정 캡쳐

 

 

'android' 카테고리의 다른 글

로그 남기기  (0) 2014.12.08
MotionEvent 객체  (0) 2014.12.04
액티비티 간 인텐트로 데이터 주고받기  (0) 2014.11.28
클릭이벤트를 처리하는 3가지 방법  (0) 2014.11.28









'android' 카테고리의 다른 글

MotionEvent 객체  (0) 2014.12.04
액티비티 간 인텐트로 데이터 주고받기  (0) 2014.11.28
클릭이벤트를 처리하는 3가지 방법  (0) 2014.11.28
layout_gravity와 gravity의 구분  (0) 2014.11.26

onClick 이벤트 처리


activity_a.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/load_pic_url_btn"
        android:onClick="onClick"/>

</LinearLayout>



ActivityA.java


public class ActivityA extends Activity {

    private String mSendPicUrl = "/data/pics";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_a);

        Button loadPicUrlBtn = (Button) findViewById(R.id.load_pic_url_btn);
        String loadUrlStr = "사진 불러오기 : " + mSendPicUrl;
        loadPicUrlBtn.setText(loadUrlStr);
    }

    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.load_pic_url_btn: {
                Intent intent = new Intent();
                intent.setClass(this, ActivityB.class);
                intent.putExtra("PIC_URL", mSendPicUrl);
                startActivityForResult(intent, 0);
            }
        }
    }

}


일반적인 프로그래밍에서의 align의 역할을 안드로이드에서는 gravity를 통해 조정한다.


정렬 속성

 설 명

 layout_gravity

 부모 컨테이너의 여유 공간에 뷰가 모두 채워지지 않아 여유 공간에 뷰를 정렬할 때

 gravity

 뷰에서 화면에 표시하는 내용물을 정렬할 때(텍스트뷰의 경우, 내용물은 글자가 되고 이미지뷰의 경우 내용물은 이미지가 됨)


    // 텍스트를 왼쪽 상단에 표시할 경우 left|top와 같이 표시한다.
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="left|top"/>


+ Recent posts