Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.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:HorizontalScrollView平滑滚动动画时间_Android_Horizontalscrollview_Smooth Scrolling - Fatal编程技术网

Android:HorizontalScrollView平滑滚动动画时间

Android:HorizontalScrollView平滑滚动动画时间,android,horizontalscrollview,smooth-scrolling,Android,Horizontalscrollview,Smooth Scrolling,我有一种情况,我使用水平滚动视图和图像,并使用按钮平滑滚动到不同的图像位置。现在它可以正常工作了,我只是想知道是否有人知道如何减慢平滑滚动方法的速度,即有更长的周年纪念时间?目前,捕捉发生得非常快 也许是通过覆盖smoothscroll,我试图搜索这个/示例,但没有成功 有什么想法吗 谢谢 Si请看一下: 可以在构造函数中传递滚动的持续时间,并指定滚动动画应花费的最长时间 这是一种对我很有效的方法: new CountDownTimer(2000, 20) { pub

我有一种情况,我使用水平滚动视图和图像,并使用按钮平滑滚动到不同的图像位置。现在它可以正常工作了,我只是想知道是否有人知道如何减慢平滑滚动方法的速度,即有更长的周年纪念时间?目前,捕捉发生得非常快

也许是通过覆盖smoothscroll,我试图搜索这个/示例,但没有成功

有什么想法吗

谢谢

Si

请看一下:

可以在构造函数中传递滚动的持续时间,并指定滚动动画应花费的最长时间


这是一种对我很有效的方法:

    new CountDownTimer(2000, 20) { 

        public void onTick(long millisUntilFinished) { 
            hv.scrollTo((int) (2000 - millisUntilFinished), 0); 
        } 

        public void onFinish() { 

        } 
     }.start();

因此,这里的水平滚动视图(hv)在两秒钟内从位置0移动到2000,如果小于2000px,则移动到视图的末尾。易于调整…

这是一个滚动条,可以自动连续滚动。它通过不断滚动图像列表来显示信用屏幕。这可能会帮助你或给你一些想法


子类HorizontalScrollView,使用反射来访问HorizontalScrollView中的私有字段
mScroller
。当然,如果基础类更改字段名,这将中断,它将默认返回到原始滚动实现

调用myScroller.startScroll(scrollX,getScrollY(),dx,0500)更改滚动速度

private OverScroller myScroller;
私有void init()
{
尝试
{
Class parent=this.getClass();
做
{
parent=parent.getSuperclass();
}而(!parent.getName().equals(“android.widget.HorizontalScrollView”);
Log.i(“滚动条”,“类:”+parent.getName());
Field Field=parent.getDeclaredField(“mScroller”);
字段。setAccessible(true);
myScroller=(OverScroller)字段。获取(this);
}捕获(无此字段例外)
{
e、 printStackTrace();
}捕获(IllegalArgumentException e)
{
e、 printStackTrace();
}捕获(非法访问例外e)
{
e、 printStackTrace();
}
}
公共空间自定义平滑滚动比(int-dx,int-dy)
{
if(myScroller==null)
{
平滑滚动(dx,dy);
返回;
}
如果(getChildCount()==0)
返回;
final int width=getWidth()-getPaddingRight()-getPaddingLeft();
final int right=getChildAt(0.getWidth();
final int maxX=Math.max(0,右-宽度);
final int scrollX=getScrollX();
dx=Math.max(0,Math.min(scrollX+dx,maxX))-scrollX;
startScroll(scrollX,getScrollY(),dx,0500);
使无效();
}
公共无效自定义滚动到(整数x,整数y)
{
customSmoothScrollBy(x-getScrollX(),y-getScrollY());
}
那么:

ObjectAnimator animator=ObjectAnimator.ofInt(yourHorizontalScrollView, "scrollX",targetXScroll );
animator.setDuration(800);
animator.start();

改用
.smoothScrollToPositionFromTop
。范例

listView.smoothScrollToPositionFromTop(scroll.pos(),0,scroll.delay());

其中,
scroll
是类中的一个简单变量,该类获取当前屏幕位置
。get()
返回新位置
。pos()
和平滑滚动时间
。delay
。。。etc

甚至更简单,
.smoothScrollTo()
。例如:

hsv.smoothScrollTo(x, y);

文档:

HorizontalScrollView没有setScroller方法,它有自己的滚动属性集。那么,如何将滚动条连接到horizontalscrollview?您是否必须创建自己的滚动条并从中覆盖属性?@Lumis嘿,感谢您的响应,尽管我认为创建一个新的计时器obj以使滚动速度变慢可能有点太多了,此外,如果在倒计时期间,用户执行另一个操作,那么会发生什么情况?它会继续执行前一个操作并开始新的操作吗?我想除非设置了一个标志来防止这种情况发生,或者在onFinish中设置它来允许新的交互。。。虽然这可能会被误解为反应缓慢的UI吗?这当然取决于你的活动有什么交互作用,但我认为最好的办法是尝试、实验,看看它的表现如何。请注意,这个对象可能有一个stop()方法,我没有尝试过,所以您可以从任意点停止并重新启动它。你是对的,这是一个过度的杀伤力,但如果没有更简单的方法,那么至少这是很好的工作。我在市面上的游戏中使用了它。是的,我之前做了一些关于倒计时的实验(在游戏的另一个方面,需要一个简单的计数器)。唯一的问题是,这个计时器需要在点上重置,这似乎是倒计时的问题,因为我尝试调用了取消,但没有工作,将其设置为null,并且它仍将继续,这相当奇怪。不管怎么说,我最终创建了一个单独的线程,所以我对倒计时obj失去了信心。我确实解决了这个问题,我使用了一些别人在这里发布的代码(我会链接,但刚刚花了5分钟搜索,找不到帖子对不起),如果我记得我回家后会发布。它基本上是通过编程计算出滚动到何处以及使用总视图宽度/超过视图数等,并在平滑滚动方法中使用。是的,smoothScrollTo(int x,int y),但有人抱怨速度太快,似乎没有调整速度的选项。对于垂直滚动也很有效(有一些小的添加)。作为一种保护措施,人们可能会编写自己的滚动条?另请注意:
OverScroller
是API 9,不是
Scroller
@pjco的子类。您可以发布对垂直滚动所做的更改。我很难让它工作。当然,请看一下我的更改:如果添加animator.setDuration(800),则只更改了
customSmoothScrollBy
中的一些值。这应该是选定的答案。除了要求API 11或更高版本外,它是完美的解决方案。(在我的库代码中,当API 11之前时,我已放弃使用
smoothScrollTo
。@darrenp you ca