今天用到了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动画,让ScrollView的头部实现了伸缩动画效果
学习封装框架的资料,实现ScrollView滚动过程中,子控件不同动画功能。
各种图片滑动效果 轮循效果.很绚丽 很好的一个demo
此代码实现安卓ScrollView动画滚动到顶部,开发者可以自己定义自己想要的算法,代码比较简单,一分谢谢了
scrollview下拉放大效果,手势,弹回效果动画(基于手势,不导入第三方包),自己搞的,欢迎提意见.
使用RN 的Scrollview 实现轮播图效果
ScrollView 滑动title渐变效果
ScrollView的阻尼回弹效果实现(仿qq空间)
实现类似于Facebook Messenger应用的方式拖动scrollView交互和动画
ScrollView滑动悬停效果
cocos2d-x中ScrollView的使用实例
本文实例为大家分享了Unity实现ScrollView滑动吸附的具体代码,供大家...具体效果如下 另外说一下有几个ScrollView自带的API需要设置一下,一个事Movement Type设置成Unrestricted,以及关闭Inertia,这样才能关闭S
类似scrollView的滑动的一个动画,左滑和右滑。算是一个抽屉效果吧。
ScrollView+TableView列表控制滑动效果,类似美团主界面操作,实现主页与详情页交互,上拉为详情,下拉手势主页; 再加移动手势的动画效果...
自定义ScrollView,实现回弹效果
使用cocos2d-x2.0.4做的一个scrollview,一战到底游戏的选关界面的实现,里面的资源仅供学习参考使用,如拿去做商业用途,侵权概不负责!
自定义的ScrollView控件,实现弹簧效果,也就是说当ScrollView拉到尽头时还可以继续拖动,松开后反弹到原来的位置。注意:ScrollView必须包含在一个大的布局之外
ScrollView在上拉动的时候,部分控件超出屏幕顶部,该控件仍然在顶部悬停的效果
ViewPager局部滑动指引效果+ScrollView弹性异步加载效果,类似掌中新浪主页viewPager和新闻列表的效果!
网上找了很多android ScrollView回弹阻尼效果的源码demo,发现都有bug,本人整理了一个demo,实际测试无bug,欢迎下载。