android动画使用三
来源:互联网 发布:机械能守恒实验带数据 编辑:程序博客网 时间:2024/05/17 20:28
使用ValueAnimator实现一个点击view展示次级view的效果
效果图:
代码:
MainActivity.java
package com.example.lhd.myvalueanimator;import android.animation.Animator;import android.animation.AnimatorListenerAdapter;import android.animation.ValueAnimator;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.RelativeLayout;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn1; private RelativeLayout r2; private float mDensity;//屏幕密度 private int r2Height; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); //将dp转换为px mDensity = getResources().getDisplayMetrics().density; //获取隐藏布局的高度 mDensity * 100dp + 0.5f r2Height = (int) (mDensity * 100 + 0.5); } private void init() { r2 = (RelativeLayout) findViewById(R.id.r2); btn1 = (Button) findViewById(R.id.btn_1); btn1.setOnClickListener(this); } @Override public void onClick(View v) { if (r2.getVisibility() == View.GONE) { //展开动画 btn1.setText("-"); open(r2); } else { //关闭动画 close(r2); btn1.setText("+"); } } private void open(View view) { view.setVisibility(View.VISIBLE); ValueAnimator animator = openAnimator(view, 0, r2Height); animator.start(); } private void close(final View view) { int curheight = view.getHeight(); ValueAnimator animator = openAnimator(view, curheight, 0);//由现在的高度变回为0 animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { view.setVisibility(View.GONE);//动画执行结束后让布局隐藏 } }); animator.start(); } private ValueAnimator openAnimator(final View view, int start, int end) { ValueAnimator animator = ValueAnimator.ofInt(start, end); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { int value = (int) animation.getAnimatedValue(); ViewGroup.LayoutParams lp = view.getLayoutParams(); lp.height = value;//高度不断变化,由start到end view.setLayoutParams(lp); } }); return animator; }}
布局文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:id="@+id/r1" android:layout_width="match_parent" android:layout_height="40dp" android:background="#0fa"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="ValueAnimator" android:textSize="18sp" /> <Button android:id="@+id/btn_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:background="#fff" android:text="+" android:textSize="30sp" /> </RelativeLayout> <!-- 隐藏布局的高度为100dp --> <RelativeLayout android:visibility="gone" android:id="@+id/r2" android:layout_width="match_parent" android:layout_height="100dp" android:background="#fa0"> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:background="@drawable/xixi" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="展开的内容" android:textColor="#fff" android:textSize="20sp" /> <Button android:id="@+id/btn_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:background="#0fa" android:text="(*^__^*)" android:textSize="30sp" /> </RelativeLayout></LinearLayout>
图片素材:
demo下载:
http://dl.download.csdn.net/down11/20160609/7ad708a192f47edc1993f5898486d031.zip?response-content-disposition=attachment%3Bfilename%3D%22MyValueAnimator.zip%22&OSSAccessKeyId=9q6nvzoJGowBj4q1&Expires=1465699930&Signature=4ISctwgPfYaJaAq%2BvC0nkSiiPt4%3D
1 0
- android动画使用三
- Android 动画使用详解(三) 属性动画
- Android 值动画使用三
- Android 属性动画使用(三)
- android三大动画的基本使用
- android三大动画的基本使用
- Android属性动画-Property Animation(三) 使用ValueAnimator完成动画
- Android动画(三):属性动画
- android动画(三)属性动画
- Android 三种动画
- Android 动画 ValueAnimator(三)
- android三种动画
- Android 三大动画
- Android 三类动画
- Android三大动画
- Android中属性动画Property Animation使用示例(三)
- android三种动画实现原理及使用
- Android动画机制与使用技巧(三)Android动画特效
- HDU 1689 Just a Hook (线段树)
- 剑指offer(12)-反转链表
- 电商之梳理相关Zookeeper相关知识---HA
- 105. Set Matrix Zeroes
- 电商之梳理Router相关知识---路由
- android动画使用三
- POJ 1236 Network of Schools【强连通Kosaraju+缩点+思维】
- AngularJs directive-transclude
- Web第一部分(1-2) 未写
- 链表高级算法--1
- 解决Oracle 11g在用EXP导出时,空表不能导出
- python 两个list 求交集,并集,差集
- SVD奇异值分解
- 电商之梳理Heartbeat相关知识---基础框架