class MainActivity
package org.androidtown.myevent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
TextView textView ;
GestureDetector detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(TextView)findViewById(R.id.textView2);
Button button=(Button)findViewById(R.id.button);
/*
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.setText("버튼이 클릭 되었습니다.");
}
});
*/
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
textView.setText("손가락이 눌렀습니다.");
}else if(event.getAction()==MotionEvent.ACTION_UP){
textView.setText("손가락이 떼졌습니다.");
}
return true;
}
});
//제스처 이벤트 객체 생성
detector=new GestureDetector(this, new GestureDetector.SimpleOnGestureListener(){
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
textView.setText("onScroll() 호출됨 :" + distanceX + ", " + distanceY);
return super.onScroll(e1, e2, distanceX, distanceY);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
textView.setText("onFling() 호출됨 :" + velocityX +", " +velocityY);
return super.onFling(e1, e2, velocityX, velocityY);
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(detector!=null){
//화면을 터치 했을 경우 제스처 이벤트 실행
return detector.onTouchEvent(event);
}else{
return super.onTouchEvent(event);
}
}
//화면 뒤로가기 백키를 실행 했을 경우
@Override
public void onBackPressed() {
Toast.makeText(getApplicationContext(), "onBackPressed() 호출됨.", Toast.LENGTH_SHORT).show();
return;
}
//메니페스트해서 설정
/*
<activity
android:name=".MainActivity"
android:label="MyEvent"
android:configChanges="orientation|screenSize|keyboardHidden"
>
*/
//스마트 폰 방향 전환
@Override
public void onConfigurationChanged(Configuration newConfig) {
if(newConfig.orientation== Configuration.ORIENTATION_LANDSCAPE){
Toast.makeText(getApplicationContext(), "가로방향으로 돌아감", Toast.LENGTH_SHORT).show();
}else if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(getApplicationContext(), "세로방향으로 돌아감", Toast.LENGTH_SHORT).show();
}
super.onConfigurationChanged(newConfig);
}
public void onButton1Clicked(View v){
}
}
R.layout.activity_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="org.androidtown.myevent.MainActivity">
<org.androidtown.myevent.MyView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/textView2"
android:background="#ffeeccff"
/>
<Button
android:text="시작"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="27dp"
android:id="@+id/button"
android:onClick="onButton1Clicked"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<TextView
android:text="결과"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="44dp"
android:id="@+id/textView2"
android:textSize="30sp"
android:layout_below="@+id/button"
android:layout_centerHorizontal="true" />
</RelativeLayout>
class MyView
package org.androidtown.myevent;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by choi on 2017-04-03.
*/
public class MyView extends View{
private final static String TAG ="MyView";
public MyView(Context context) {
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
Log.d(TAG, "손가락이 눌렀습니다.");
}else if(event.getAction()==MotionEvent.ACTION_UP){
Log.d(TAG, "손가락이 떼졌습니다.");
}else if(event.getAction()==MotionEvent.ACTION_MOVE){
Log.d(TAG, "손가락이 움직입니다.");
}
return true;
}
}
AndroidMainfest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.androidtown.myevent">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="MyEvent"
android:configChanges="orientation|screenSize|keyboardHidden"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
이벤트 처리
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
textView.setText("손가락이 눌렀습니다.");
}else if(event.getAction()==MotionEvent.ACTION_UP){
textView.setText("손가락이 떼졌습니다.");
}
return true;
}
});
제스처 이벤트
GestureDetector detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//제스처 이벤트 객체 생성
detector=new GestureDetector(this, new GestureDetector.SimpleOnGestureListener(){
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
textView.setText("onScroll() 호출됨 :" + distanceX + ", " + distanceY);
return super.onScroll(e1, e2, distanceX, distanceY);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
textView.setText("onFling() 호출됨 :" + velocityX +", " +velocityY);
return super.onFling(e1, e2, velocityX, velocityY);
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(detector!=null){
//화면을 터치 했을 경우 제스처 이벤트 실행
return detector.onTouchEvent(event);
}else{
return super.onTouchEvent(event);
}
}
터치 이벤트 View 상속
class MyView
package org.androidtown.myevent;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by choi on 2017-04-03.
*/
public class MyView extends View{
private final static String TAG ="MyView";
public MyView(Context context) {
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
Log.d(TAG, "손가락이 눌렀습니다.");
}else if(event.getAction()==MotionEvent.ACTION_UP){
Log.d(TAG, "손가락이 떼졌습니다.");
}else if(event.getAction()==MotionEvent.ACTION_MOVE){
Log.d(TAG, "손가락이 움직입니다.");
}
return true;
}
}
배경화면 연보라
<org.androidtown.myevent.MyView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/textView2"
android:background="#ffeeccff"
/>
= > 로그 출력
04-03 05:24:01.131 15899-15899/org.androidtown.myevent D/MyView: 손가락이 눌렀습니다. 04-03 05:24:01.226 15899-15899/org.androidtown.myevent D/MyView: 손가락이 떼졌습니다. 04-03 05:24:02.187 15899-15899/org.androidtown.myevent D/MyView: 손가락이 눌렀습니다. 04-03 05:24:02.208 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.225 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.242 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.258 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.275 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.292 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.308 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.325 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.342 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.358 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.375 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.458 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.475 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.492 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.509 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.525 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.543 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.559 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.575 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.592 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.609 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.659 15899-15899/org.androidtown.myevent D/MyView: 손가락이 움직입니다. 04-03 05:24:02.692 15899-15899/org.androidtown.myevent D/MyView: 손가락이 떼졌습니다. 04-03 07:07:48.966 7689-7689/org.androidtown.myevent D/MyView: 손가락이 눌렀습니다. 04-03 07:07:48.966 7689-7689/org.androidtown.myevent D/MyView: 손가락이 움직입니다. |
화면 뒤로가기 백키를 실행 했을 경우
//화면 뒤로가기 백키를 실행 했을 경우
@Override
public void onBackPressed() {
Toast.makeText(getApplicationContext(), "onBackPressed() 호출됨.", Toast.LENGTH_SHORT).show();
return;
}
화면 방향 전환(가로, 세로 )
AndroidMainfest.xml
추가
android:configChanges="orientation|screenSize|keyboardHidden"
<activity
android:name=".MainActivity"
android:label="MyEvent"
android:configChanges="orientation|screenSize|keyboardHidden"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
//메니페스트해서 설정
/*
<activity
android:name=".MainActivity"
android:label="MyEvent"
android:configChanges="orientation|screenSize|keyboardHidden"
>
*/
//스마트 폰 방향 전환
@Override
public void onConfigurationChanged(Configuration newConfig) {
if(newConfig.orientation== Configuration.ORIENTATION_LANDSCAPE){
Toast.makeText(getApplicationContext(), "가로방향으로 돌아감", Toast.LENGTH_SHORT).show();
}else if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(getApplicationContext(), "세로방향으로 돌아감", Toast.LENGTH_SHORT).show();
}
super.onConfigurationChanged(newConfig);
}
38강
39강
40강
41강
댓글 ( 4)
댓글 남기기