Skip to content

Commit 42d8bbe

Browse files
Bogdan MelnychukBogdan Melnychuk
authored andcommitted
Fix for issue bmelnychuk#4. 2D scrolling mode added, keep in mind this comes with few limitations: you won't be able not place views on right side like alignParentRight. Everything should be align left. Is not enabled by default
1 parent 0afc749 commit 42d8bbe

File tree

5 files changed

+1195
-3
lines changed

5 files changed

+1195
-3
lines changed

app/src/main/java/com/unnamed/b/atv/sample/activity/MainActivity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.unnamed.b.atv.sample.fragment.CustomViewHolderFragment;
1414
import com.unnamed.b.atv.sample.fragment.FolderStructureFragment;
1515
import com.unnamed.b.atv.sample.fragment.SelectableTreeFragment;
16+
import com.unnamed.b.atv.sample.fragment.TwoDScrollingFragment;
1617

1718
import java.util.ArrayList;
1819
import java.util.LinkedHashMap;
@@ -32,6 +33,7 @@ protected void onCreate(Bundle savedInstanceState) {
3233
listItems.put("Folder Structure Example", FolderStructureFragment.class);
3334
listItems.put("Custom Holder Example", CustomViewHolderFragment.class);
3435
listItems.put("Selectable Nodes", SelectableTreeFragment.class);
36+
listItems.put("2d scrolling", TwoDScrollingFragment.class);
3537

3638

3739
final List<String> list = new ArrayList(listItems.keySet());
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package com.unnamed.b.atv.sample.fragment;
2+
3+
import android.app.Fragment;
4+
import android.os.Bundle;
5+
import android.text.TextUtils;
6+
import android.view.LayoutInflater;
7+
import android.view.View;
8+
import android.view.ViewGroup;
9+
10+
import com.unnamed.b.atv.model.TreeNode;
11+
import com.unnamed.b.atv.sample.R;
12+
import com.unnamed.b.atv.sample.holder.IconTreeItemHolder;
13+
import com.unnamed.b.atv.sample.holder.SelectableHeaderHolder;
14+
import com.unnamed.b.atv.view.AndroidTreeView;
15+
16+
/**
17+
* Created by Bogdan Melnychuk on 2/12/15.
18+
*/
19+
public class TwoDScrollingFragment extends Fragment {
20+
private static final String NAME = "Very long name for folder";
21+
private AndroidTreeView tView;
22+
23+
@Override
24+
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
25+
View rootView = inflater.inflate(R.layout.fragment_selectable_nodes, null, false);
26+
rootView.findViewById(R.id.status).setVisibility(View.GONE);
27+
ViewGroup containerView = (ViewGroup) rootView.findViewById(R.id.container);
28+
29+
TreeNode root = TreeNode.root();
30+
31+
TreeNode s1 = new TreeNode(new IconTreeItemHolder.IconTreeItem(R.string.ic_folder, "Folder with very long name ")).setViewHolder(new SelectableHeaderHolder(getActivity()));
32+
TreeNode s2 = new TreeNode(new IconTreeItemHolder.IconTreeItem(R.string.ic_folder, "Another folder with very long name")).setViewHolder(new SelectableHeaderHolder(getActivity()));
33+
34+
fillFolder(s1);
35+
fillFolder(s2);
36+
37+
root.addChildren(s1, s2);
38+
39+
tView = new AndroidTreeView(getActivity(), root);
40+
tView.setDefaultAnimation(true);
41+
tView.setUse2dScroll(true);
42+
tView.setDefaultContainerStyle(R.style.TreeNodeStyleCustom);
43+
containerView.addView(tView.getView());
44+
45+
tView.expandAll();
46+
47+
if (savedInstanceState != null) {
48+
String state = savedInstanceState.getString("tState");
49+
if (!TextUtils.isEmpty(state)) {
50+
tView.restoreState(state);
51+
}
52+
}
53+
return rootView;
54+
}
55+
56+
private void fillFolder(TreeNode folder) {
57+
TreeNode currentNode = folder;
58+
for (int i = 0; i < 10; i++) {
59+
TreeNode file = new TreeNode(new IconTreeItemHolder.IconTreeItem(R.string.ic_folder, NAME)).setViewHolder(new SelectableHeaderHolder(getActivity()));
60+
currentNode.addChild(file);
61+
currentNode = file;
62+
}
63+
}
64+
65+
@Override
66+
public void onSaveInstanceState(Bundle outState) {
67+
super.onSaveInstanceState(outState);
68+
outState.putString("tState", tView.getSaveState());
69+
}
70+
}

app/src/main/res/layout/layout_selectable_header.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
app:iconSize="24dp" />
4545

4646
<TextView
47+
android:layout_marginRight="10dp"
4748
android:layout_centerVertical="true"
4849
android:textSize="16sp"
4950
android:layout_marginLeft="10dp"

library/src/main/java/com/unnamed/b/atv/view/AndroidTreeView.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class AndroidTreeView {
3434
private TreeNode.TreeNodeClickListener nodeClickListener;
3535
private boolean mSelectionModeEnabled;
3636
private boolean mUseDefaultAnimation = false;
37+
private boolean use2dScroll = false;
3738

3839
public AndroidTreeView(Context context, TreeNode root) {
3940
mRoot = root;
@@ -53,6 +54,14 @@ public void setDefaultContainerStyle(int style, boolean applyForRoot) {
5354
this.applyForRoot = applyForRoot;
5455
}
5556

57+
public void setUse2dScroll(boolean use2dScroll) {
58+
this.use2dScroll = use2dScroll;
59+
}
60+
61+
public boolean is2dScrollEnabled() {
62+
return use2dScroll;
63+
}
64+
5665
public void setDefaultViewHolder(Class<? extends TreeNode.BaseNodeViewHolder> viewHolder) {
5766
defaultViewHolderClass = viewHolder;
5867
}
@@ -73,12 +82,12 @@ public void collapseAll() {
7382

7483

7584
public View getView(int style) {
76-
final ScrollView view;
85+
final ViewGroup view;
7786
if (style > 0) {
7887
ContextThemeWrapper newContext = new ContextThemeWrapper(mContext, style);
79-
view = new ScrollView(newContext);
88+
view = use2dScroll ? new TwoDScrollView(newContext) : new ScrollView(newContext);
8089
} else {
81-
view = new ScrollView(mContext);
90+
view = use2dScroll ? new TwoDScrollView(mContext) : new ScrollView(mContext);
8291
}
8392

8493
Context containerContext = mContext;

0 commit comments

Comments
 (0)