Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在可视寻呼机内具有平移功能的阿卡廷发动机_Android_Android Viewpager_Achartengine - Fatal编程技术网

Android 在可视寻呼机内具有平移功能的阿卡廷发动机

Android 在可视寻呼机内具有平移功能的阿卡廷发动机,android,android-viewpager,achartengine,Android,Android Viewpager,Achartengine,我在一个android.support.v4.view.ViewPager中有一个AcharEngine GraphicalView图表 我希望当用户在图表上拖动手指时,图表可以平移,但现在,在一个小的拖动动作后,ViewPager会捕捉到该事件 最好,我希望能够让用户平移到图表的末尾,然后让ViewPager切换页面。 作为替代方案,我想至少阻止ViewPager捕捉图表中的拖动运动 有什么想法吗?我认为您应该实现自己的ViewPager并自己处理触摸事件 也许这个链接可以帮助你:我的解决方案

我在一个
android.support.v4.view.ViewPager
中有一个AcharEngine GraphicalView图表

我希望当用户在图表上拖动手指时,图表可以平移,但现在,在一个小的拖动动作后,ViewPager会捕捉到该事件

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


有什么想法吗?

我认为您应该实现自己的ViewPager并自己处理触摸事件

也许这个链接可以帮助你:

我的解决方案来了

它允许用户在有数据时拖动图形。之后,拖动事件被ViewPager捕获

就像我说的,关键是这个解决方案是函数

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);
}
}
公共类参数GraphicalView扩展org.achartengine.GraphicalView{
//存储数据模型大小
私有int mDataSize=0;
//存储数据集中的第一个X位置
私有长mDataStartX=0;
//存储数据集中的最后一个X位置
私有长mDataEndX=0;
//寻呼机
私有视图父mViewPager;
//(...)
@凌驾
公共布尔onTouchEvent(运动事件){
//保存第一次触摸的位置,以便确定用户是否正在拖动
//左还是右
if(event.getAction()==MotionEvent.ACTION\u向下){
mFirstTouchX=event.getX();
}
//当mViewPager.RequestDisallowWinterCeptTouchEvent(true)时,viewpager不会
//截取事件,拖动事件(平移、收缩)被GraphicalView捕获
//如果出现以下情况,我们希望阻止ViewPager拦截事件:
//1-有2个或更多触摸,即捏手势
//2-用户正在向左拖动,但右侧没有要显示的数据
//3-用户正在向右拖动,但左侧没有可显示的数据
如果(event.getPointerCount()>1
||(event.getX()0&&mrender.getXAxisMax()mFirstTouchX&&mData.size()>0&&mrender.getXAxisMin()>mDataStartX)){
mViewPager.RequestDisallowWinterCeptTouchEvent(true);
}
否则{
mViewPager.RequestDisallowWinterCeptTouchEvent(false);
}
返回super.onTouchEvent(事件);
}
}

谢谢!我投了更高的票,因为这是一种方法,但我对这个解决方案不满意。我使用RequestDisallowWinterCeptTouchEvent获得了一些不错的结果。完成后我会发布我的解决方案。@TiagoA:感谢Upvote,我将很高兴看到您的解决方案。我不得不放弃此解决方案,因为它有时会导致ViewPager在挤压时出现异常。我认为ViewPager捕捉到了一些奇怪的“遗留”事件。在此期间,您是否找到了另一个可行的解决方案?每当触摸到
GraphicalView
时,我自己只需调用
RequestDisallowWinterCeptTouchEvent
,我想尝试以您的方式调整该解决方案,然后找到您的评论…不,我没有。。。我无法解决它,因为异常被抛出SDK深处。过了一段时间我就辞职了。如果我没记错的话,崩溃只是因为我同时使用了平移和收缩(缩放)手势。如果您的图形不能缩放,可能会起作用。我可以说,我想实现的东西对用户来说太让人困惑了。有时图形平移,有时整个视图平移,这似乎有点随机。仅为一个操作使用GraphicalView区域更简单:平移(或缩放)图形。