您的位置:首页 > 移动开发 > Android开发

Android收缩控件,展开,收缩

2017-05-05 17:28 357 查看
今天项目需要实现一个点击展开收缩的功能,网上搜索找了个适合自己的,稍微修改了下适合项目本身需求的。

只是做记录,需要的可以参考。

不废话直接上代码。

首先main布局:

<?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:background="@mipmap/head"
android:orientation="vertical"
tools:context="com.foldtext.MainActivity">

<LinearLayout
android:id="@+id/lin_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/backdrop_top_style"
android:orientation="horizontal">

<TextView
android:id="@+id/hello1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:maxLines="2"
android:padding="10dp"
android:text="标题" />

<TextView
android:id="@+id/textview_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="点击向下展开" />

<ImageView
android:id="@+id/img_shrink"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:padding="10dp"
android:src="@mipmap/bottom" />
</LinearLayout>

<com.foldtext.Utils.ExpandView
android:id="@+id/ex_expandview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone" />

</LinearLayout>


2.收缩控件布局:

<?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:background="#99ffffff"
android:gravity="center_horizontal"
android:orientation="horizontal">

<TextView
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_weight="1"
android:gravity="center"
android:text="按钮1"
android:textSize="14sp" />

<TextView
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_weight="1"
android:gravity="center"
android:text="按钮2"
android:textSize="14sp" />

<TextView
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_weight="1"
android:gravity="center"
android:text="按钮3"
android:textSize="14sp" />

<TextView
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_weight="1"
android:gravity="center"
android:text="按钮4"
android:textSize="14sp" />

</LinearLayout>


3.Main代码:

package com.foldtext;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.foldtext.Utils.ExpandView;

public class MainActivity extends AppCompatActivity {
private LinearLayout lin_tv;
private ImageView img_shrink;
private ExpandView expandView;
private TextView textview_title;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
oncreateview();
ExpandView();
}

/**
* 初始化控件
*/
private void oncreateview() {
lin_tv = (LinearLayout) findViewById(R.id.lin_tv);
img_shrink = (ImageView) findViewById(R.id.img_shrink);
expandView = (ExpandView) findViewById(R.id.ex_expandview);
textview_title = (TextView) findViewById(R.id.textview_title);
}

/**
* 初始化调用
*/
public void ExpandView() {
expandView.setContentView();
lin_tv.setClickable(true);
lin_tv.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
if (expandView.isExpand()) {
expandView.collapse();
textview_title.setText("点击向下展开");
img_shrink.setImageDrawable(getResources().getDrawable(R.mipmap.bottom));
} else {
expandView.expand();
textview_title.setText("点击向上收缩");
img_shrink.setImageDrawable(getResources().getDrawable(R.mipmap.shrink));
}
}
});
}
}


4.收缩控件代码:

package com.foldtext.Utils;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;

import com.foldtext.R;

/**
* 收缩控件
*/
public class ExpandView extends FrameLayout implements View.OnClickListener {

private Animation mExpandAnimation;
private Animation mCollapseAnimation;
private boolean mIsExpand;

public ExpandView(Context context) {
this(context, null);
}

public ExpandView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}

public ExpandView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initExpandView();
}

private void initExpandView() {
LayoutInflater.from(getContext()).inflate(R.layout.layout_expand, this, true);

mExpandAnimation = AnimationUtils.loadAnimation(getContext(), R.anim.expand);
mExpandAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}

@Override
public void onAnimationRepeat(Animation animation) {
}

@Override
public void onAnimationEnd(Animation animation) {
setVisibility(View.VISIBLE);
}
});

mCollapseAnimation = AnimationUtils.loadAnimation(getContext(), R.anim.collapse);
mCollapseAnimation.setAnimationListener(new Animation.AnimationListener() {

@Override
public void onAnimationStart(Animation animation) {
}

@Override
public void onAnimationRepeat(Animation animation) {
}

@Override
public void onAnimationEnd(Animation animation) {

setVisibility(View.GONE);
}
});

}

public void collapse() {
if (mIsExpand) {
mIsExpand = false;
clearAnimation();
startAnimation(mCollapseAnimation);
}
}

public void expand() {
if (!mIsExpand) {
mIsExpand = true;
clearAnimation();
startAnimation(mExpandAnimation);
}
}

public boolean isExpand() {
return mIsExpand;
}

public void setContentView() {
View view = null;
view = LayoutInflater.from(getContext()).inflate(R.layout.layout_expand, null);
removeAllViews();
addView(view);
}

@Override
public void onClick(View v) {
switch (v.getId()) {

}
}
}


效果图:





就这样完啦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息