여기 내 솔루션을 간다.
사용자는 그래프가있는 동안 그래프를 드래그 할 수 있습니다. 그 후, 드래그 이벤트는 ViewPager에 의해 포착됩니다.
내가 말했듯이, 핵심은이 솔루션이 requestDisallowInterceptTouchEvent 기능입니다.
public class ParameterGraphicalView extends org.achartengine.GraphicalView {
// stores the data model size
private int mDataSize = 0;
// stores the first X position in the dataset
private long mDataStartX = 0;
// stores the last X position in the dataset
private long mDataEndX = 0;
// the ViewPager
private ViewParent mViewPager;
//(...)
@Override
public boolean onTouchEvent(MotionEvent event) {
// save the position of the first touch so we can determine whether the user is dragging
// left or right
if (event.getAction() == MotionEvent.ACTION_DOWN) {
mFirstTouchX = event.getX();
}
// when mViewPager.requestDisallowInterceptTouchEvent(true), the viewpager does not
// intercept the events, and the drag events (pan, pinch) are caught by the GraphicalView
// we want to keep the ViewPager from intercepting the event if:
// 1- there are 2 or more touches, i.e. the pinch gesture
// 2- the user is dragging to the left but there is no data to show to the right
// 3- the user is dragging to the right but there is no data to show to the left
if (event.getPointerCount() > 1
|| (event.getX() < mFirstTouchX && mDataSize > 0 && mRenderer.getXAxisMax() < mDataEndX)
|| (event.getX() > mFirstTouchX && mData.size() > 0 && mRenderer.getXAxisMin() > mDataStartX)) {
mViewPager.requestDisallowInterceptTouchEvent(true);
}
else {
mViewPager.requestDisallowInterceptTouchEvent(false);
}
return super.onTouchEvent(event);
}
}
때때로이 문제는 ViewPager에서 꼬집을 때 예외가 발생했기 때문에 삭제해야했습니다. ViewPager가 이상한 "남은"이벤트를 포착하고 있었다고 생각합니다. –
그동안 다른 해결책을 찾았습니까? 저는'GraphicalView'를 만질 때마다'requestDisallowInterceptTouchEvent'를 호출합니다. 당신이했던 것과 같은 방식으로 그 솔루션을 조정하려고 시도하고 싶었고 당신의 코멘트를 발견하려고했습니다 ... – prom85
아니요 ... 제가 해결할 수 없었습니다. SDK에서 예외가 발생했기 때문입니다. 잠시 후 나는 그만 뒀다. 올바르게 호출 한 경우 팬 및 핀치 (확대/축소) 동작을 사용했기 때문에 충돌이 발생했습니다. 그래픽이 확대되지 않으면 어쩌면 작동 할 수도 있습니다. 구현하고자하는 것이 어쨌든 사용자를 혼란스럽게 만들었다 고 말할 수 있습니다. 때로는 그래픽으로 화면 이동하고, 다른 시각에서는 전체보기를 팬하는 것이 약간 무작위로 보였습니다. 한 번의 작업에 GraphicalView 영역을 사용하는 것이 더 간단합니다. 그래픽을 이동 (또는 확대/축소)하십시오. –