Android点击展示/收起更多详情+动画效果 Value

来源:互联网 发布:网络推广课程 编辑:程序博客网 时间:2024/04/30 20:10

Android点击展示/收起更多详情+动画效果 Value

布局文件layout_look_details.xml

布局文件有一些注意事项
1.要保证所有参与动画的布局根节点高度必须是wrap_content,否则会出现位置错乱现象

<?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="wrap_content"    android:orientation="vertical">    <LinearLayout        android:id="@+id/layer1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="#f0f0f0"        android:orientation="horizontal"        android:gravity="right">        <LinearLayout            android:layout_width="0dp"            android:layout_weight="2"            android:layout_height="match_parent"            android:gravity="center_vertical"            android:paddingLeft="@dimen/dp_10"            android:orientation="vertical">            <TextView                android:layout_width="wrap_content"                android:layout_height="@dimen/dp_30"                android:gravity="center"                android:text="第一期"/>            <TextView                android:layout_width="wrap_content"                android:layout_height="@dimen/dp_30"                android:gravity="center"                android:text="编号:888888"/>        </LinearLayout>        <LinearLayout            android:layout_width="0dp"            android:layout_weight="1"            android:paddingRight="@dimen/dp_10"            android:layout_height="wrap_content"            android:gravity="center"            android:orientation="vertical">            <TextView                android:layout_width="match_parent"                android:layout_height="@dimen/dp_30"                android:gravity="right|center_vertical"                android:text="今日5:00揭晓"/>            <LinearLayout                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:gravity="right"                android:orientation="horizontal">                <TextView                    android:id="@+id/look_detail"                    android:layout_width="wrap_content"                    android:layout_height="@dimen/dp_30"                    android:gravity="center"                    android:textColor="#0083ce"                    android:clickable="true"                    android:textSize="12sp"                    android:text="查看详情"/>                <ImageView                    android:id="@+id/icon1"                    android:layout_width="30dp"                    android:layout_height="30dp"                    android:src="@mipmap/ic_launcher"/>            </LinearLayout>        </LinearLayout>    </LinearLayout>    <LinearLayout        android:id="@+id/layer2"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center"        android:background="#60ff0000">        <TextView            android:layout_width="wrap_content"            android:layout_height="66dp"            android:gravity="center"            android:text="详情内容"/>    </LinearLayout></LinearLayout>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/activity_main"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <include layout="@layout/layout_look_details" /></LinearLayout>

MainActivity.java

package smx.com.demoanimal1;import android.animation.Animator;import android.animation.ValueAnimator;import android.support.v4.view.ViewCompat;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.view.ViewTreeObserver;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;public class MainActivity extends AppCompatActivity {    private int mLayoutHeight = 0;  //动画执行的padding高度    private boolean isOpen = false; //是否开启状态    private TextView lookDetail;    private LinearLayout layer2;    private ImageView icon1;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        //展开/收起        initShowHide();    }    /**     * 展开收起 执行动画     */    private void initShowHide() {        //布局完成        layer2.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {            @Override            public void onGlobalLayout() {                //移除所有监听                layer2.getViewTreeObserver().removeGlobalOnLayoutListener(this);                mLayoutHeight = layer2.getHeight();                System.out.println("得到的高度:" + mLayoutHeight);                //隐藏当前控件                layer2.setPadding(0,-mLayoutHeight,0,0);            }        });        //点击,开始执行动画        lookDetail.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                ValueAnimator valueAnimator = new ValueAnimator();                if (isOpen){                    valueAnimator.setIntValues(0, -mLayoutHeight);                    lookDetail.setText("查看详情");                }else {                    valueAnimator.setIntValues(-mLayoutHeight, 0);                    lookDetail.setText("收起");                }                //设置监听的值                valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {                    @Override                    public void onAnimationUpdate(ValueAnimator animator) {                        int value = (int) animator.getAnimatedValue();                        layer2.setPadding(0,value,0,0);                    }                });                //动画执行中监听                valueAnimator.addListener(new Animator.AnimatorListener() {                    @Override                    public void onAnimationStart(Animator animator) {                        //动画开始,不能点击                        lookDetail.setClickable(false);                    }                    @Override                    public void onAnimationEnd(Animator animator) {                        lookDetail.setClickable(true);                    }                    @Override                    public void onAnimationCancel(Animator animator) {                    }                    @Override                    public void onAnimationRepeat(Animator animator) {                    }                });                valueAnimator.setDuration(500);                valueAnimator.start();                //状态更改                isOpen = !isOpen;                //进行旋转                ViewCompat.animate(icon1).rotationBy(180f).setDuration(500).start();            }        });    }    private void initView() {        lookDetail = (TextView) findViewById(R.id.look_detail);        layer2 = (LinearLayout) findViewById(R.id.layer2);        icon1 = (ImageView) findViewById(R.id.icon1);    }}
0 0
原创粉丝点击