2013-10-14 35 views
2

我在android.support.v4.view.ViewPager里面有一个achartengine GraphicalView图表。achartengine在viewpager里面平移

我希望当用户将她的手指上我的图表进行平移,但现在的情况是由ViewPager小的阻力运动之后被抓。

最好,我希望能够让用户平移到图表的末尾,然后让ViewPager切换页面。 作为替代,我想至少停止ViewPager捕捉图表内的拖动动作。

任何想法?

回答

2

这里去我的解决办法。

它允许用户在有数据的时候拖动图形。之后,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); 
} 
} 
+0

我不得不放弃此解决方案,因为它在捏时导致ViewPager中的异常。 我认为ViewPager正在捕捉一些奇怪的“剩余”事件。 –

+0

您是否在此期间找到了另一个工作解决方案?我自己只要在'GraphicalView'被触及的时候调用'requestDisallowInterceptTouchEvent',我想以你所做的方式尝试调整该解决方案,然后找到你的评论... – prom85

+1

不,我没有......我解决不了它是因为在SDK中引发了异常。过了一段时间,我刚刚辞职。如果我记得正确,只会发生崩溃,因为我正在使用平移和缩放(缩放)手势。如果你的图形不缩放,也许这是有效的。 我可以说虽然我想实现的东西对用户来说太混乱了。看起来有点随意,有时图形摇摄,有时整个视图都会摇动。将GraphicalView区域仅用于一个操作会更简单:平移(或缩放)图形。 –

1

我认为你应该自己实现你自己的ViewPager并处理Touch事件。

也许这个链接可以帮助你:how to disable viewpager adapter on touching specific views?

+0

谢谢!我赞成是因为这是一种方法,但我对这个解决方案并不满意。我使用requestDisallowInterceptTouchEvent得到了一些很好的结果。 我会在完成时发布我的解决方案。 –

+0

@TiagoA。 :感谢Upvote,我很乐意看到您的解决方案 –

相关问题