属性动画实现平移效果
来源:互联网 发布:什么软件字体多 编辑:程序博客网 时间:2024/04/27 14:37
Android提供了几种动画类型:View Animation 、Drawable Animation 、Property Animation 。View Animation相当简单,不过只能支持简单的缩放、平移、旋转、透明度基本的动画,且有一定的局限性。比如:你希望View有一个颜色的切换动画;你希望可以使用3D旋转动画;你希望当动画停止时,View的位置就是当前的位置;这些View Animation都无法做到。
以3.0版本为界,之前的称之为传统动画,传统动画特点万变不离其宗,宗就是是它刚开始的位置.
之后出了属性动画
需求:
一个button和imageview相邻,点击button,控制imageview的显示和隐藏,并且让imageview从button中隐藏和开启
用传统动画的话可以使用旋转动画并且配以AnimationListener,但是效果不是类似抽屉抽拉的效果
今天我们来用Property Animation实现一个类似抽屉抽拉的效果的动画.
布局文件如下,很简单
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <LinearLayout android:background="@android:color/holo_blue_bright" android:onClick="llClick" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="click me" android:textSize="30sp" /> </LinearLayout> <LinearLayout android:background="@android:color/holo_green_light" android:id="@+id/llhiddview" android:layout_width="match_parent" android:layout_height="40dp" android:gravity="center_vertical" android:orientation="horizontal"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="hidden view" android:textSize="30sp" /> </LinearLayout></LinearLayout>
activity中
public class MainActivity extends ActionBarActivity { LinearLayout llhidv; int hidviewHeight; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); llhidv = (LinearLayout) findViewById(R.id.llhiddview); float disn = getResources().getDisplayMetrics().density; hidviewHeight = (int) (disn * 40 + 0.5); Log.e("lc---", hidviewHeight +"hidviewHeight"); } public void llClick(View view) { if (llhidv.getVisibility() == View.GONE) { Log.e("lc---", llhidv.getVisibility() + "GONE"); open(llhidv); } else { Log.e("lc---", llhidv.getVisibility() + "fei gone"); close(llhidv); } } /** * 关闭--动画 * * @param view */ private void close(final View view) { int origheight = view.getHeight(); Log.e("lc---", origheight + "origheight"); ValueAnimator animator = createDropAnimator(view, origheight, 0); animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { view.setVisibility(View.GONE); Log.e("lc---", "" + "close"); } }); animator.start(); } /** * 打开--动画 * * @param view */ private void open(View view) { view.setVisibility(View.VISIBLE); ValueAnimator animator = createDropAnimator(view, 0, hidviewHeight); Log.e("lc---", hidviewHeight +"hidviewHeight---open"); animator.start(); } private ValueAnimator createDropAnimator(final View view, int start, int end) { ValueAnimator animator = ValueAnimator.ofInt(start, end); animator.addUpdateListener( new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { // int value = (Integer)valueAnimator.getAnimatedValue(); int value = (Integer) valueAnimator.getAnimatedValue();// 得到的值 ViewGroup.LayoutParams layoutParams = view.getLayoutParams();// layoutParams.height = Float.floatToIntBits(value); layoutParams.height = value; view.setLayoutParams(layoutParams); } } ); return animator; }}
除此之外可能的问题,如果imageview的高度不是固定为40,怎么一开始就获取imageview的高度呢?
要知道view.getHeight()方法是view在绘制完成之后才会取得view的真是高度哦,view初始化的时候宽高可都是0哦!!!
http://blog.csdn.net/listening_music/article/details/7210146
http://blog.csdn.net/nailsoul/article/details/25909313
好的,解决完毕.
- 属性动画实现平移效果
- Android Acitivy切换平移动画效果实现
- 动画效果之渐变、缩放、平移、旋转<代码实现>
- css3平移、旋转、倾斜、缩放、动画效果的实现
- 动画效果之渐变、缩放、平移、旋转<代码实现>
- Android 实现属性动画平移,旋转,缩放,渐变 《H》
- 图片平移实现水波动画
- Android中侧滑菜单效果实现(主界面和菜单界面实现平移、缩放、滚动动画)
- 平移加旋转实现效果
- 属性动画实现卫星菜单效果
- 利用ViewFlipper实现View间的动画效果(平移/渐变...)
- 属性动画的平移加旋转
- Android 属性动画 实现view翻转 旋转 平移 拉伸 透明度 背景颜色变换
- 实现高端的自定义View属性动画自定义圆改变颜色进行下平移
- ViewPager+属性动画 实现炫酷视差动画效果
- 使用属性动画实现星光四射的动画效果
- css动画属性实现3d效果立体盒子效果
- Android 补间动画,具体介绍了透明度、平移,旋转,缩放4种动画效果的实现,简单易懂
- Android NDK编译环境配置
- Maven安装和简单入门(1)
- Centos配置yum源
- 258. Add Digits
- 简单三层加存储过程实现新闻列表分页
- 属性动画实现平移效果
- 程序员面试(c++)——面向对象
- 重构系列:减少成员变量个数,降低变量的作用范围
- MEMM最大熵马尔科夫模型
- Android 西班牙语字幕乱码 && 字符编码
- 合并两个排序的链表
- 第三方登录QQ
- 二级列表
- 欢迎使用CSDN-markdown编辑器