Skip to content

Commit dfb943c

Browse files
authored
initial commit
1 parent 4c4f47c commit dfb943c

3 files changed

Lines changed: 111 additions & 0 deletions

File tree

Collapsible-card/build.gradle

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
plugins {
2+
id 'com.android.library'
3+
}
4+
5+
android {
6+
compileSdk 32
7+
8+
defaultConfig {
9+
minSdk 26
10+
targetSdk 32
11+
}
12+
13+
compileOptions {
14+
sourceCompatibility JavaVersion.VERSION_16
15+
targetCompatibility JavaVersion.VERSION_16
16+
}
17+
}
18+
19+
dependencies {
20+
implementation 'androidx.cardview:cardview:1.0.0'
21+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
package="com.errorxcode.card">
4+
5+
</manifest>
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package com.errorxcode.card;
2+
3+
import android.content.Context;
4+
import android.graphics.Color;
5+
import android.graphics.drawable.Drawable;
6+
import android.graphics.drawable.GradientDrawable;
7+
import android.transition.AutoTransition;
8+
import android.transition.TransitionManager;
9+
import android.util.AttributeSet;
10+
import android.view.View;
11+
import android.widget.RelativeLayout;
12+
13+
import androidx.annotation.NonNull;
14+
import androidx.annotation.Nullable;
15+
16+
public class CollapsibleCard extends RelativeLayout {
17+
private boolean isCollapsed;
18+
private AutoTransition transition = new AutoTransition();
19+
20+
public CollapsibleCard(@NonNull Context context) {
21+
super(context);
22+
init();
23+
}
24+
25+
public CollapsibleCard(@NonNull Context context, @Nullable AttributeSet attrs) {
26+
super(context, attrs);
27+
init();
28+
}
29+
30+
public CollapsibleCard(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
31+
super(context, attrs, defStyleAttr);
32+
init();
33+
}
34+
35+
private void init(){
36+
GradientDrawable drawable = new GradientDrawable();
37+
drawable.setCornerRadius(10);
38+
drawable.setColor(Color.WHITE);
39+
setPadding(10,10,10,10);
40+
setBackground(drawable);
41+
setElevation(10);
42+
}
43+
44+
@Override
45+
protected void onAttachedToWindow() {
46+
super.onAttachedToWindow();
47+
var layout = this;
48+
for (int i = 0; i < layout.getChildCount(); i++) {
49+
var view = layout.getChildAt(i);
50+
if ("main".equals(view.getTag()))
51+
view.setOnClickListener(v -> {
52+
if (isCollapsed)
53+
expand();
54+
else
55+
collapse();
56+
});
57+
}
58+
collapse();
59+
}
60+
61+
public void collapse() {
62+
var layout = this;
63+
for (int i = 1; i < layout.getChildCount(); i++) {
64+
var view = layout.getChildAt(i);
65+
if (!"main".equals(view.getTag())){
66+
view.setVisibility(GONE);
67+
}
68+
}
69+
TransitionManager.beginDelayedTransition(this,transition);
70+
isCollapsed = true;
71+
}
72+
73+
public void expand() {
74+
TransitionManager.beginDelayedTransition(this,transition);
75+
var layout = this;
76+
for (int i = 1; i < layout.getChildCount(); i++) {
77+
layout.getChildAt(i).setVisibility(View.VISIBLE);
78+
}
79+
isCollapsed = false;
80+
}
81+
82+
public void setCustomTransition(AutoTransition transition) {
83+
this.transition = transition;
84+
}
85+
}

0 commit comments

Comments
 (0)