안드로이드 스튜디오 터치 이벤트
안드로이드 스튜디오반응형
ONTOUCH EVENT
package com.example.touchevent;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
public class MainActivity extends AppCompatActivity {
protected class MyView extends View{
int x=100, y=100;
String str;
public MyView(Context context){
super(context);
setBackgroundColor(Color.RED);
}
@Override
protected void onDraw (Canvas canvas){
Paint p = new Paint();
p.setColor(Color.WHITE);
canvas.drawCircle(x,y,50,p);
p.setTextSize(70);
canvas.drawText("액션 종류: "+str,10,100,p);
}
@Override
public boolean onTouchEvent (MotionEvent event){
x = (int) event.getX();
y = (int) event.getY();
if (event.getAction()==MotionEvent.ACTION_UP)
str = "ACTION_UP";
if (event.getAction()==MotionEvent.ACTION_DOWN)
str = "ACTION+DOWN";
if (event.getAction()==MotionEvent.ACTION_MOVE)
str = "ACTION_MOVE";
invalidate();
return true;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyView myView = new MyView(this);
setContentView(myView);
}
}



| 액션 | |
| ACTION_DOWN | 누르는 동작 시작 |
| ACTION_UP | 누르고 있다가 떨어짐 |
| ACTION_MOVE | 누르는 도중 움직임 |
| ACTION_CANCEL | 터치 동작 취소 |
| ACTION_OUTSIDE | 터치가 현재 위젯을 벗어남 |
SINGLE TOUCH
package com.example.singletouch;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new Singletouchview(this, null));
}
}
(Singletouchview.java)
package com.example.singletouch;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import java.util.jar.Attributes;
public class Singletouchview extends View{
private Paint paint = new Paint();
private Path path = new Path();
public Singletouchview(Context context, AttributeSet attrs){
super(context,attrs);
paint.setAntiAlias(true);
paint.setStrokeWidth(10f);
paint.setColor(Color.rgb(255,176,194));
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND); //페인트 속성 지정 (선 끝이 둥글게 함)
}
@Override
protected void onDraw (Canvas can){
can.drawPath(path,paint);
}
@Override
public boolean onTouchEvent (MotionEvent event){
float event_x = event.getX();
float event_y = event.getY(); // 위치 좌표 불러오기
switch (event.getAction()){
case MotionEvent.ACTION_DOWN: // 화면에 터치가 시작되면
path.moveTo(event_x,event_y); //지정된 좌표로 이동 (시작점)
return true;
case MotionEvent.ACTION_MOVE: //터치가 움직이면
path.lineTo(event_x,event_y); //지정된 좌표까지 선을 긋는다
break;
case MotionEvent.ACTION_UP: //터치를 끝내면
break;
default:
return false;
}
invalidate();
return true;
}
}

MultiTouch
package com.example.multitouch;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MultiTouchView(this,null));
}
}
package com.example.multitouch;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class MultiTouchView extends View {
private static final int SIZE = 60;
final int MAX_POINT = 10;
float[] x = new float[MAX_POINT];
float[] y = new float[MAX_POINT];
boolean[] touching = new boolean[MAX_POINT];
private Paint mPaint;
public MultiTouchView(Context context, AttributeSet attrs){
super(context,attrs);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(Color.BLUE);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
}
@Override
public boolean onTouchEvent (MotionEvent event){
int index = event.getActionIndex();
int id = event.getPointerId(index);
int action = event.getActionMasked();
switch (action){
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
x[id] = (int) event.getX(index);
y[id] = (int) event.getY(index);
touching[id] = true;
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
case MotionEvent.ACTION_CANCEL:
touching[id] = false;
break;
}
invalidate();
return true;
}
@Override
protected void onDraw (Canvas canvas){
super.onDraw(canvas);
for (int i = 0 ; i< MAX_POINT; i++) {
if (touching[i])
canvas.drawCircle(x[i], y[i], SIZE, mPaint);
}
}
}
scale gesture
package com.example.scale;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new imageview(this));
}
}
package com.example.scale;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
import com.example.scale.R;
public class imageview extends View {
private Drawable image;
private ScaleGestureDetector gestureDetector;
private float scale = 1.0f;
public imageview(Context context) {
super(context);
image = context.getResources().getDrawable(R.drawable.lemon);
setFocusable(true);
image.setBounds(0, 0, image.getIntrinsicWidth(),
image.getIntrinsicHeight());
gestureDetector = new ScaleGestureDetector(context, new ScaleListener());
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.scale(scale, scale);
image.draw(canvas);
canvas.restore();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
gestureDetector.onTouchEvent(event);
invalidate();
return true;
}
private class ScaleListener extends
ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
scale *= detector.getScaleFactor();
if (scale < 0.1f)
scale = 0.1f;
if (scale > 10.0f)
scale = 10.0f;
invalidate();
return true;
}
}
}
반응형
'안드로이드 스튜디오' 카테고리의 다른 글
| 안드로이드 스튜디오 메뉴 설정 (0) | 2020.04.25 |
|---|---|
| 안드로이드 스튜디오 event 처리 4 (seekbar) (0) | 2020.04.19 |
| 안드로이드 스튜디오 event 처리 3 (0) | 2020.04.18 |
| 안드로이드 스튜디오 event 처리2 (0) | 2020.04.18 |
| 안드로이드 스튜디오 event 처리 (0) | 2020.04.18 |