Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.nwt.labelspinner.expandable;
- import android.animation.ObjectAnimator;
- import android.content.Context;
- import android.content.res.TypedArray;
- import android.util.AttributeSet;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.widget.FrameLayout;
- import android.widget.ImageView;
- import android.widget.Switch;
- import android.widget.TextView;
- import androidx.annotation.NonNull;
- import androidx.annotation.Nullable;
- import androidx.constraintlayout.widget.ConstraintLayout;
- import androidx.recyclerview.widget.RecyclerView;
- import com.nwt.labelspinner.R;
- import org.jetbrains.annotations.NotNull;
- public class ExpandableLayout extends FrameLayout {
- private ExpandableLayoutView expandableLayoutView;
- private TextView mExpandableLable;
- private ConstraintLayout rexlExpandable;
- private Switch expandableSwitch;
- private ImageView expandableIcon;
- private ImageView ivHeaderIcon;
- private RecyclerView expandableRv;
- private String label = "";
- private boolean isExpanded = false;
- private int expandedType = 0;
- private boolean isEnable = true;
- private int headerIcon = R.drawable.ic_drop_down_black;
- private ExpandableLayoutListener listener = new ExpandableLayoutListener() {
- @Override
- public void open(@NotNull ExpandableLayoutView view) {
- }
- @Override
- public void close(@NotNull ExpandableLayoutView view) {
- }
- @Override
- public void start(@NotNull ExpandableLayoutView view) {
- }
- };
- public ExpandableLayout(@NonNull Context context) {
- this(context, null);
- }
- public ExpandableLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
- this(context, attrs, 0);
- }
- public ExpandableLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- addLayoutView();
- addAttrs(context, attrs);
- }
- private void addAttrs(Context context, AttributeSet attrs) {
- TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ExpandableLayout, 0, 0);
- try {
- setLabel(a.getString(R.styleable.ExpandableLayout_label));
- setExpanded(a.getBoolean(R.styleable.ExpandableLayout_exp_expanded, false));
- setExpandedType(
- ExpFormat.fromId(a.getInt(R.styleable.ExpandableLayout_exp_right_type, 1)).id
- );
- setHeaderIcon(
- a.getResourceId(R.styleable.ExpandableLayout_exp_header_icon, R.drawable.ic_drop_down_black)
- );
- } finally {
- a.recycle();
- }
- }
- private void addLayoutView() {
- addView(LayoutInflater.from(getContext()).inflate(R.layout.expandable_layout, this, false));
- }
- public void setLabel(String label) {
- this.label = label;
- mExpandableLable.setText(this.label);
- }
- public void setExpanded(boolean isExpanded) {
- this.isExpanded = isExpanded;
- expandableSwitch.setChecked(this.isExpanded);
- changeIcon(!this.isExpanded);
- if (this.isExpanded) {
- expandableLayoutView.expand();
- } else {
- expandableLayoutView.collapse();
- }
- }
- public void setExpandedType(int type) {
- this.expandedType = type;
- expandableSwitch.setVisibility(
- (this.expandedType == ExpandableType.ICON) ? View.INVISIBLE : View.VISIBLE
- );
- expandableIcon.setVisibility(
- (this.expandedType == ExpandableType.SWITCH) ? View.INVISIBLE : View.VISIBLE
- );
- }
- public void toggle() {
- expandableLayoutView.toggle();
- expandableSwitch.toggle();
- }
- public void setEnable(boolean isEnable) {
- this.isEnable = isEnable;
- rexlExpandable.setEnabled(this.isEnable);
- expandableSwitch.setEnabled(this.isEnable);
- expandableIcon.setEnabled(this.isEnable);
- }
- public void setHeaderIcon(int headerIcon) {
- this.headerIcon = headerIcon;
- ivHeaderIcon.setImageResource(this.headerIcon);
- }
- private void changeIcon(boolean isOpen) {
- if (isOpen) {
- createRotateAnimator(expandableIcon, 0f, 180f).start();
- } else {
- createRotateAnimator(expandableIcon, 180f, 0f).start();
- }
- }
- public void listener(ExpandableLayoutListener listener) {
- this.listener = listener;
- expandableLayoutView.setOnExpandListener(listener);
- }
- public void setUpRv(RecyclerView.LayoutManager layoutManager, RecyclerView.Adapter adapter, boolean isNestedScrollingEnabled) {
- expandableRv.setLayoutManager(layoutManager);
- expandableRv.setAdapter(adapter);
- expandableRv.setNestedScrollingEnabled(isNestedScrollingEnabled);
- }
- public void addItemDecoration(RecyclerView.ItemDecoration itemDecoration) {
- expandableRv.addItemDecoration(itemDecoration);
- }
- private ObjectAnimator createRotateAnimator(View target, float from, float to) {
- ObjectAnimator animator = ObjectAnimator.ofFloat(target, "rotation", from, to);
- animator.setDuration(300);
- animator.setInterpolator(Utils.createInterpolator(Utils.LINEAR_INTERPOLATOR));
- return animator;
- }
- private enum ExpFormat {
- expSwitch(0), expIcon(1);
- int id;
- ExpFormat(int i) {
- this.id = i;
- }
- public static ExpFormat fromId(int id) {
- for (ExpFormat f : values()) {
- if (f.id == id) return f;
- }
- throw new IllegalArgumentException();
- }
- }
- class ExpandableType {
- public static final int SWITCH = 0;
- public static final int ICON = 1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement