Android 처리 슬라이딩 및 클릭 이벤트 충돌
실현: 부모 컨트롤을 사용자 정의하여 onInterceptTouchEvent 방법에서 클릭 여부를 판단하고 클릭 여부를 판단하면child에 직접 전달하여 클릭 이벤트에 응답한다.슬라이드하는 경우
사건을 차단하고 호출을 통해 호출자에게 전달한다.
장점: 이 컨트롤러는 터치 이벤트의 분배에 대해 상응하는 처리만 하고 각종 미끄럼과 클릭이 충돌하는 경우에 적용됩니다.
사용: 이 컨트롤을 부모 레이아웃으로 설정하면 setmSetOnslideListener를 통해 슬라이딩 이벤트를 리셋하여 처리할 수 있습니다
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
import android.widget.RelativeLayout;
public class MyRadioRelativeLayout extends RelativeLayout {
public MyRadioRelativeLayout(Context context) {
this(context, null);
}
public MyRadioRelativeLayout(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
public MyRadioRelativeLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
private void initView() {
}
private boolean mScrolling;
private float touchDownX;
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touchDownX = event.getX();
mScrolling = false;
break;
case MotionEvent.ACTION_MOVE:
if (Math.abs(touchDownX - event.getX()) >= ViewConfiguration.get(
getContext()).getScaledTouchSlop()) {
mScrolling = true;
} else {
mScrolling = false;
}
break;
case MotionEvent.ACTION_UP:
mScrolling = false;
break;
}
return mScrolling;
}
float x1 = 0;
float x2 = 0;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
return true;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
x2 = event.getX();
if (touchDownX - x2 > DensityUtil.dip2px(getContext(), 40)) {
if(mSetOnSlideListener!=null){
mSetOnSlideListener.onRightToLeftSlide();
}
}
if (touchDownX - x2 < -DensityUtil.dip2px(getContext(), 40)) {
if(mSetOnSlideListener!=null){
mSetOnSlideListener.onLeftToRightSlide();
}
}
break;
}
return super.onTouchEvent(event);
}
private setOnSlideListener mSetOnSlideListener;
public setOnSlideListener getmSetOnSlideListener() {
return mSetOnSlideListener;
}
public void setmSetOnSlideListener(setOnSlideListener mSetOnSlideListener) {
this.mSetOnSlideListener = mSetOnSlideListener;
}
public interface setOnSlideListener{
void onRightToLeftSlide();
void onLeftToRightSlide();
}
}
전재 대상:https://www.cnblogs.com/liujingg/p/5017127.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.