Android 는 현재 클릭 위치 가 원 의 내부 에 있 는 지 여 부 를 어떻게 판단 합 니까?
3485 단어 Android위 치 를 판단 하 다
효 과 는 그림 과 같다.
위의 그림 에서 보 듯 이 원 안 을 클릭 하여 드래그 할 때 원 은 따라 이동 하지만 원 밖 을 클릭 하여 드래그 할 때 원 은 아무런 반응 이 없다.
이 효 과 를 실현 하 는 것 은 어렵 지 않다.먼저 원 의 중심 점 좌표(x1,y1)를 계산 하고 x1,y1 은 화면 에 대한 좌표 이지 레이아웃 에 대한 좌표 가 아니다.
그 다음 에 현재 누 른 좌표(x2,y2)를 얻 으 려 면 현재 누 른 점 의 좌표(x2,y2)와 원심(x1,y1)의 거리 d 의 길 이 를 계산 한 다음 에 원 의 반지름 r 와 비교 해 야 한다.만약 d>r 가 현재 누 른 점 이 원 밖 에 있 으 면 d<r 라면 현재 누 른 점 은 원 안에 있다.다음 그림 과 같다.
이렇게 주의 하 세 요.이상 은 Motion Event.ACTION 에 있어 야 합 니 다.DOWN 에서 계산 하면 거리 d 가 반경 r 보다 클 때 return false 는 현재 컨트롤 이 이 벤트 를 소비 하지 않 습 니 다.
코드 는 다음 과 같 습 니 다:
public class MainActivity extends Activity {
int lastX;
int lastY;
boolean isView = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final CircleImageView civ = (CircleImageView) findViewById(R.id.civ_levitate);
civ.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
//
int[] location = new int[2];
civ.getLocationOnScreen(location);
// x y
int x = location[0];
int y = location[1];
// getLeft
int r = (civ.getRight()-civ.getLeft())/2;
//
int vCenterX = x+r;
int vCenterY = y+r;
// x x
int distanceX = Math.abs(vCenterX-lastX);
// y y
int distanceY = Math.abs(vCenterY-lastY);
//
int distanceZ = (int) Math.sqrt(Math.pow(distanceX,2)+Math.pow(distanceY,2));
// ,
if(distanceZ > r){
return false;
}
isView = true;
break;
case MotionEvent.ACTION_MOVE:
if(isView){
int moveX = (int) event.getRawX();
int moveY = (int) event.getRawY();
int disX = moveX - lastX;
int disY = moveY - lastY;
int left = civ.getLeft()+disX;
int right = civ.getRight()+disX;
int top = civ.getTop()+disY;
int bottom =
civ.getBottom()+disY;
civ.layout(left,top,right,bottom);
lastX = moveX;
lastY = moveY;
}
break;
case MotionEvent.ACTION_UP:
isView = false;
break;
}
return true;
}
});
}
}
자,demo 다운로드 주소:다운로드 클릭이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.