Android - ScrollView上的scrollTo()无法正常运行

时间:2016-04-20 08:39:59

标签: appcelerator appcelerator-mobile appcelerator-titanium

我正在使用Titanium SDK 5.1.2.GA.我在Android和iOS上有像TabGroup这样的栏。当选项卡在视图中不完全可见并且您单击该选项卡时,我移动滚动。

在iOS上运行完美但在Android上运行不正常。

这是我移动滚动视图的代码:

if((view.rect.x + view.rect.width) > (toolbarX + $.toolbar.rect.width)){
    $.toolbar.scrollTo(((view.rect.x + view.rect.width) - $.toolbar.rect.width) + 10, 0);
}else if(view.rect.x < toolbarX){
    $.toolbar.scrollTo(view.rect.x - 10, 0);
}

$。toolbar - &gt;滚动型

view - &gt;标签

这张照片解释了我的问题:

enter image description here

我在互联网上看过这张JIRA票 https://jira.appcelerator.org/browse/TIMOB-17954

这将是问题??

修改

此问题是由Appcelerator上的新单元系统引起的。

我在tiapp.xml上有这一行

<property name="ti.ui.defaultunit" type="string">dp</property>

但是Titanium上的其他函数在px上返回它们的值,所以这是一个问题。

我现在的问题是:

  • 什么单位返回事件监听器,如'scroll'? (px或dp) 因为我的toolbarX = e.x来自滚动事件
  • 哪些单位需要scrollTo(x,y)????

2 个答案:

答案 0 :(得分:1)

解决方案:

if(Alloy.Globals.isAndroid){
            var measure = require('alloy/measurement');

            //Vemos si tenemos que mover la toolbar
            if((view.rect.x + view.rect.width) > (toolbarX + $.toolbar.rect.width)){
                $.toolbar.scrollTo(((measure.dpToPX(view.rect.x) + measure.dpToPX(view.rect.width)) - measure.dpToPX($.toolbar.rect.width)) + 10, 0);
            }else if(view.rect.x < toolbarX){
                $.toolbar.scrollTo(measure.dpToPX(view.rect.x) - 10, 0);
            }
        }else{
            //Vemos si tenemos que mover la toolbar
            if((view.rect.x + view.rect.width) > (toolbarX + $.toolbar.rect.width)){
                $.toolbar.scrollTo(((view.rect.x + view.rect.width) - $.toolbar.rect.width) + 10, 0);
            }else if(view.rect.x < toolbarX){
                $.toolbar.scrollTo(view.rect.x - 10, 0);
            }
        }
    }

$.toolbar.addEventListener('scroll', function(e){

    Ti.API.info("-- toolbarX: " + e.x + " / " + Alloy.Globals.measure.pxToDP(e.x));

    if(Alloy.Globals.isAndroid){
        toolbarX = Alloy.Globals.measure.pxToDP(e.x);
    }else{
        toolbarX = e.x;
    }
});

这个问题很新,因为:

<property name="ti.ui.defaultunit" type="string">dp</property>

现在,您必须以单位(px或dp)为单位(px或dp)传递Android上的值,因为某些函数返回px并且需要px而其他函数需要dp。

答案 1 :(得分:0)

这对我有用

if (OS_ANDROID) {
    $.tabbar.scrollTo(Util.DPUnitsToPixels(x), 0);
} else {
    $.tabbar.scrollTo(x, 0);    
}   

在android上将dp转换为像素