Android 사용자 정의 view 드래그 볼 이동 실현
View 에 있 는 Public boolean onTouchEvent(MotionEvent event)방법 을 다시 써 서 모든 제스처 동작 을 얻 은 다음 에 필요 한 제스처 를 선택 하여 조작 할 수 있 습 니 다.
그래서 다음 과 같은 코드 를 얻 을 수 있 습 니 다.
/**
* Created by obo on 15/8/21.
*/
public class TouchView extends View{
public static String TAG = TouchView.class.getCanonicalName();
//
private PointF currrentPosition = new PointF(100,100);
//
private PointF moveStartPosition = new PointF(0,0);
//
private PointF moveEndPosition = new PointF(0,0);
private Context context;
public TouchView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
@Override
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
canvas.drawCircle(currrentPosition.x + (moveEndPosition.x - moveStartPosition.x),currrentPosition.y+(moveEndPosition.y - moveStartPosition.y),50,new Paint());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getActionMasked())
{
case MotionEvent.ACTION_DOWN:
moveStartPosition.x = event.getX();
moveStartPosition.y = event.getY();
break;
case MotionEvent.ACTION_MOVE:
moveEndPosition.x = event.getX();
moveEndPosition.y = event.getY();
//
this.postInvalidate();
break;
case MotionEvent.ACTION_UP:
currrentPosition.x += (moveEndPosition.x - moveStartPosition.x);
currrentPosition.y += (moveEndPosition.y - moveStartPosition.y);
moveStartPosition.x = moveEndPosition.x;
moveStartPosition.y = moveEndPosition.y;
break;
default:
}
return true;
}
}
현재 onTouchEvent 방법 이 ture 로 돌아 가 는 것 을 볼 수 있 습 니 다.이 View 는 현재 제스처 동작 을 캡 처 하려 는 것 임 을 나타 냅 니 다.여 기 는 누 르 기,이동,들 기 등 관련 동작 을 포함 합 니 다.false 로 돌아 가면 첫 번 째 ACTION 만 받 습 니 다.DOWN 은 누 른 응답 으로 이후 이동 제스처 와 들 어 올 린 제스처 를 얻 을 수 없습니다.방법 onTouchEvent 에서 세 가지 일 을 했 습 니 다.1.사용자 가 손가락 을 눌 렀 을 때 누 르 기 시작 한 좌 표를 초기 화하 고 화면 을 새로 고침 하지 않 아 도 됩 니 다.2.사용자 가 손가락 을 움 직 일 때 사용자 의 손가락 위 치 를 기록 하고 화면 을 다시 새로 고침 합 니 다.3.사용자 가 제스처,즉 손가락 을 들 어 올 릴 때 위치 할당 값 을 기본 좌표 점 에 주 고 제스처 기점 좌표 와 제스처 종점 좌표 x,y 가 같다(0).
그리고 Matrix 를 사용 하면 전체 과정 을 더욱 간단 하 게 만 들 수 있 습 니 다.작은 공의 bitmap 만 미리 얻 으 면 matrix 를 사용 하여 작은 공 을 변위,변형,회전 을 포함 한 변환 을 할 수 있 습 니 다.여 기 는 matrix 의 변위 변환 효과 만 사용 하고 구체 적 인 실현 코드 는 다음 과 같 습 니 다.
/**
* Created by obo on 15/8/26.
*/
public class MatrixView extends View {
public final static String TAG = MatrixView.class.getCanonicalName();
//bitmap
Matrix matrix = new Matrix();
//
PointF startPoint = new PointF();
// bitmap
Bitmap bitmap = Bitmap.createBitmap(100,100, Bitmap.Config.ARGB_8888);
public MatrixView(Context context, AttributeSet attrs) {
super(context, attrs);
Canvas canvas = new Canvas(bitmap);
// bitmap
canvas.drawCircle(50,50,50,new Paint());
}
@Override
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
canvas.drawBitmap(bitmap, matrix, new Paint());
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
super.onTouchEvent(event);
if (event.getActionMasked() == MotionEvent.ACTION_MOVE)
{
matrix.postTranslate(event.getX() - startPoint.x, event.getY() - startPoint.y );
//
this.postInvalidate();
}
startPoint.x = event.getX();
startPoint.y = event.getY();
return true;
}
}
이 코드 가 실 현 된 효 과 는 이전 과 마찬가지 로 Matrix 변 수 를 추 가 했 고 Pointf 변 수 를 하나 줄 였 으 며 onTouchEvent 와 onDraw 방법 에서 의 코드 양도 약간 줄 었 다.Matrix 는 사실 3X3 의 행렬 로 Matrix 를 사용 하면 한 걸음 한 걸음 변 화 를 축적 할 수 있 습 니 다.matrix 를 몇 번 조작 하 든 그림 에 대한 처리 복잡 도 는 고정 적 이 고 변 하지 않 으 며 그림 을 신속하게 변환 할 수 있 습 니 다.이것 이 바로 matrix 를 사용 하 는 것 이 가 져 온 장점 입 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.