今天用到了ScrollView scrollTo方法 发现还是有一些地方需要注意 它是瞬间完成的,这里使用了一些方法实现慢慢移动的动画效果,所以记录一下。
效果图:
有点大。。。。
打开程序 会计算第一个Textview的高度 这里使用了ViewTreeObserver来得到view的高度,因为这个监听是在view计算出大小之后首先调用的方法,所以我们可以避免getWidth getHeight等于0的状况。
献上布局文件看下:
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/sv_menu" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/notifacation_background" android:scrollbars="none" > <LinearLayout android:id="@+id/ll_tt" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="vertical" > <TextView android:id="@+id/tv_01" android:layout_width="250dip" android:layout_height="250dip" android:layout_marginTop="10px" android:background="@drawable/notifacation_background" android:text="一去二三里" android:textColor="#000000" android:textSize="22sp" android:textStyle="bold" android:gravity="center"/> <TextView android:layout_width="250dip" android:layout_height="250dip" android:layout_marginTop="10dip" android:background="@drawable/notifacation_background" android:text="烟村四五家" android:textColor="#000000" android:textSize="22sp" android:textStyle="bold" android:gravity="center" /> <TextView android:layout_width="250dip" android:layout_height="250dip" android:layout_marginTop="10px" android:background="@drawable/notifacation_background" android:text="亭台六七座" android:textColor="#000000" android:textSize="22sp" android:textStyle="bold" android:gravity="center" /> <TextView android:layout_width="250dip" android:layout_height="250dip" android:layout_marginTop="10px" android:background="@drawable/notifacation_background" android:text="八九十枝花" android:textColor="#000000" android:textSize="22sp" android:textStyle="bold" android:gravity="center" /> </LinearLayout> </ScrollView>很简单, 不过写的不是很规范。。。
实现的Activity就很简单的 不过注意的点都在这里了:
import android.app.Activity; import android.os.Bundle; import android.os.CountDownTimer; import android.view.ViewGroup; import android.view.ViewTreeObserver.OnPreDrawListener; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; public class AActivity extends Activity { private ScrollView svMenu; //需要滚动 private TextView tv01; //我们要用到它的高度信息 private boolean isScroll = false; // OnPreDrawListener是多次调用的 只要拖动都会有调用 所以得到值后加标记 private int scrollY = 0; // 不用多说了 滚动的距离 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.new_activity); svMenu = (ScrollView) findViewById(R.id.sv_menu); tv01 = (TextView) findViewById(R.id.tv_01); //注册监听器 tv01.getViewTreeObserver().addOnPreDrawListener(preDrawListener); } private OnPreDrawListener preDrawListener = new OnPreDrawListener() { @Override public boolean onPreDraw() { if (!isScroll) { isScroll = true; // 这里我有margin 所以得到margin ViewGroup.LayoutParams p = tv01.getLayoutParams(); if (p != null && p instanceof LinearLayout.LayoutParams) { LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) p; scrollY = tv01.getHeight() + lp.topMargin; } System.out.println("高度: " + scrollY); // 这个timer执行scrollY毫秒 每1毫秒回调一次 new CountDownTimer(scrollY, 1) { public void onTick(long millisUntilFinished) { System.out.println("finished: " + millisUntilFinished); svMenu.scrollTo(0, (int) (scrollY - millisUntilFinished)); } public void onFinish() { System.out.println("done!"); svMenu.scrollTo(0, scrollY); } }.start(); // remove 必须重新得到 之前用了ViewTreeObserver的对象 remove会报错 tv01.getViewTreeObserver().removeOnPreDrawListener( preDrawListener); } return true; } }; }源地址:http://751401909.iteye.com/admin/blogs/1920553
这样具有动画效果的ScrollView scrollTo 就完成了。如果大家有什么好的建议或者方法 提出来大家一起研究。
相关推荐
总的来说,实现ScrollView的阻尼回弹效果涉及到Android的自定义视图、事件监听、动画系统等多个方面。通过自定义ScrollView,我们可以更好地控制滚动行为,提供更丰富的用户体验。这不仅适用于ScrollView,也可以...
每当动画更新时,我们根据当前动画的进度计算出新的滚动位置,然后调用ScrollView的scrollTo()方法来更新位置,从而实现了回弹效果。 另外,如果你希望实现更加复杂的效果,如物理模拟的回弹动画,可以使用Android...
本话题主要探讨如何自定义ScrollView以实现阻尼效果和控件悬浮这两个功能。 一、自定义ScrollView实现阻尼效果 阻尼效果通常是指在滚动过程中,滚动速度会随着手指离开屏幕而逐渐减慢,直到停止,这种模拟真实物理...
总的来说,"ScrollView与自定义滑块结合使用的Demo"是一个涉及到触摸事件处理、组件间通信、动画实现等多个Android开发技术的综合案例。它展示了如何通过自定义组件和巧妙的事件处理,来实现更复杂的用户交互。这...
同时,需要实现一个回弹动画,这通常通过改变ScrollView的滚动位置来实现,可以使用`scrollTo`或`smoothScrollTo`方法来平滑地调整位置。为了实现回弹效果,我们可以用一个线性插值器(LinearInterpolator)配合...
本篇文章将详细介绍ScrollView的使用、如何判断其滑动到顶部和底部,以及scrollTo和scrollBy方法的区别。 首先,让我们了解ScrollView的基本用法。ScrollView是一个可滚动的容器,它可以包含一个直接子视图。这意味...
在`onAnimationUpdate`回调中,获取当前动画的值并使用`scrollTo()`更新ScrollView的位置。 4. **启动动画**:调用`start()`启动动画。 示例代码如下: ```java ValueAnimator animator = ValueAnimator.ofInt...
在本文中,我们将深入探讨如何使用uni-app的ScrollView组件实现双联动效果,这是一种常见的前端交互设计,常见于导航菜单与内容区域的同步滚动。在微信小程序等移动应用开发中,这种功能可以提供良好的用户体验,使...
7. **自定义滚动效果**:通过重写`onTouchEvent()`和`onInterceptTouchEvent()`方法,可以实现自定义的滚动逻辑,比如限制滚动范围、添加动画效果等。 8. **注意事项**:HorizontalScrollView不支持滚动嵌套,即在...
6. **使用动画**: 除了直接调用滚动方法,你还可以创建自定义动画来实现更流畅的滚动效果。通过`ObjectAnimator`或`ValueAnimator`,你可以控制滚动速度和动画的其他属性。 在实际项目中,你可能会遇到不同的情景,...
在Android应用开发中,回弹效果(Bounce Effect)通常用于ScrollView、ListView等滚动视图,为用户提供一种超出边界时的自然反馈,增加交互的趣味性和用户体验。这种效果常见于iOS系统,但在Android中需要通过特定的...
总的来说,自定义一个支持回弹效果的ScrollView涉及到Android的触摸事件处理、动画系统以及自定义View的基本原理。这个过程不仅加深了对Android UI组件的理解,也为优化用户体验提供了可能。在实际开发中,这样的...
如果是,使用`scroller.getCurrX()`和`scroller.getCurrY()`获取当前滚动位置,并调用`scrollTo()`方法更新视图位置。 6. 考虑到边界条件,当达到页面末尾时,停止Scroller的滚动。 此外,为了实现分页效果,我们...
5. **性能优化**:考虑性能优化,例如避免不必要的重绘,合理使用View的缓存,以及处理滚动动画的平滑性。 6. **嵌套滚动(Nested Scrolling)**:Android 5.0(API 21)引入了嵌套滚动机制,使得ScrollView可以与...
【Android ScrollView 阻尼效果实现详解】 在Android开发中,ScrollView是一个常见的控件,用于显示单个垂直滚动的布局。然而,QQ空间等许多应用为了提供更好的用户体验,会在滚动时加入阻尼效果,即当用户停止滑动...
6. 为了实现滚动到底部或顶部的效果,可以使用ScrollView提供的scrollTo()或smoothScrollTo()方法。例如,`scrollView.smoothScrollTo(0, 0)`将使ScrollView滚动到顶部。 7. 有时,你可能希望在滚动到顶部或底部时...
最后,为了提供更好的滚动体验,你还可以考虑实现一些额外的功能,比如滚动动画、滚动边界检测以及与nested滚动的兼容(如果需要在NestedScrollView中嵌套使用)。 在实际项目中,你可以创建一个名为`...
在Runnable的run()方法中,更新当前显示的图片索引,并调用ScrollView的scrollTo()方法滚动到对应的位置。然后使用Handler的postDelayed()方法设置定时任务,使Runnable每隔一段时间执行一次。 4. 无限循环:为了...
3. **平滑滚动**:使用`smoothScrollBy()`或`scrollTo()`方法可以实现平滑滚动效果,这些方法会逐渐改变滚动位置,而不是立即跳转,从而提供更流畅的用户体验。 4. **嵌套滚动**:当HorizontalScrollView或...
在实际项目中,可能还需要根据具体需求进行一些调整和优化,比如添加指示器、动画效果等。这个`PagedScrollView-master`压缩包中的代码应该包含了一个完整的实现示例,你可以下载后详细研究,以加深理解。