Skip to content
This repository was archived by the owner on Apr 14, 2020. It is now read-only.

Commit 84a44bf

Browse files
author
LeeReindeer
committed
Add chinese and english readme.
1 parent 602a35e commit 84a44bf

3 files changed

Lines changed: 170 additions & 26 deletions

File tree

README-ZH.md

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
# Tree2View
2+
3+
[![Build Status](https://travis-ci.org/LeeReindeer/Tree2View.svg?branch=master)](https://travis-ci.org/LeeReindeer/Tree2View)
4+
5+
> TreeView implementation in Android.
6+
7+
## 主要功能
8+
9+
|Tree2View|文件管理器(一个例子)|
10+
|--------|----------|
11+
|①多级分层的树结构视图 | 基本的文件管理器布局|
12+
|②记忆展开状态 | 自动展开上次打开未关闭的目录|
13+
|③使用适配器设计模式,用户可自定义 TreeAdapter | 对不同类型的文件显示不同的Icon |
14+
|④动态增删节点 | 删除和添加文件后可自动刷新状态 |
15+
|⑤选择模式 | 长按节点进行文件操作(Copy, Cut, Rename, Delete) |
16+
|⑥动画支持,内置增删节点的动画 | 增删文件时带有动画 |
17+
18+
[一个更简单的例子](/demo/app/src/main/java/xyz/leezoom/tree2view_demo/MainActivity.java)
19+
20+
## 实现原理
21+
22+
- TreeView 继承自 ListView
23+
24+
- DFS遍历可展开的树节点,转化为List 与 [TreeAdapter](https://github.com/LeeReindeer/Tree2View/blob/master/treeview/src/main/java/xyz/leezoom/view/treeview/adapter/TreeAdapter.java) 进行适配。
25+
26+
- 分级的视觉效果通过 [SimpleTreeAdapter](https://github.com/LeeReindeer/Tree2View/blob/master/treeview/src/main/java/xyz/leezoom/view/treeview/adapter/SimpleTreeAdapter.java)(通过对不同深度的节点设置不同的**缩进**)来实现的。
27+
28+
- 使用 [DefaultTreeNode](https://github.com/LeeReindeer/Tree2View/blob/master/treeview/src/main/java/xyz/leezoom/view/treeview/module/DefaultTreeNode.java) 来(用链表保存子节点)增删节点。这样就实现了视觉效果和数据结构统一的设计。
29+
30+
## 效果预览 - Preview
31+
32+
![](https://github.com/LeeReindeer/Tree2View/blob/master/screenshot/tree2view_demo1.png)
33+
34+
![](https://github.com/LeeReindeer/Tree2View/blob/master/screenshot/tree2view_demo2.png)
35+
36+
## 下载
37+
38+
> 未上传到 `jCenter()`
39+
40+
1. 可直接clone本项目使用。
41+
42+
```git
43+
git clone git@github.com:LeeReindeer/Tree2View.git
44+
```
45+
46+
2. 打开 Android Studio, 依次点击 `FIle` -> `New` -> `Import Module`, 导入这个 module 即可。
47+
48+
3.`build.gradle` 里添加依赖
49+
50+
```groovy
51+
implementation project(path: ':treeview')
52+
//或者
53+
compile project(path: ':treeview')
54+
```
55+
56+
## 使用
57+
58+
1.`xml` 中添加,和 `ListView` 类似的.
59+
60+
```xml
61+
<xyz.leezoom.view.treeview.TreeView
62+
android:id="@+id/tree_view"
63+
android:layout_marginTop="16dp"
64+
android:layout_width="match_parent"
65+
android:layout_height="match_parent"
66+
android:divider="#ffffff"
67+
android:dividerHeight="1px">
68+
69+
</xyz.leezoom.view.treeview.TreeView>
70+
```
71+
2. 在代码里添加初始化,这里使用Kotlin(Java 代码类似)
72+
73+
```kotlin
74+
var root :DefaultTreeNode? = DefaultTreeNode("Root")
75+
tree_view.root = root
76+
val child1 = DefaultTreeNode("Child1")
77+
val child2 = DefaultTreeNode("Child2")
78+
//在你创建节点之后,你需要立即添加她
79+
root.addChild(child1)
80+
root.addChild(child2)
81+
val child3 = DefaultTreeNode("Child3")
82+
child1.addChild(child3)
83+
//是否默认显示根节点的孩子
84+
tree_view.isRootVisible = true
85+
//默认的动画
86+
tree_view.isDefaultAnimation = true
87+
```
88+
89+
3. 设置监听器
90+
91+
`Tree2View` 有默认的点击监听器,你也可以自己实现,可以参考[这里](https://github.com/LeeReindeer/Tree2View/blob/master/app/src/main/java/xyz/leezoom/tree2/activity/MainActivity.kt#L111)
92+
93+
选择(长按)监听器需要自己实现。
94+
95+
4. 自定义使用
96+
97+
只需要实现 `TreeAapater` ,就那么简单。
98+
99+
```java
100+
public class FileTreeAdapter extends TreeAdapter<FileItem> {
101+
//resourceId 是 itemView 的 xml 视图。
102+
public FileTreeAdapter(Context context, DefaultTreeNode root, int resourceId) {
103+
super(context, root, resourceId);
104+
}
105+
106+
@Override
107+
public View getView(int position, View convertView, ViewGroup parent) {
108+
//your code here
109+
//...
110+
//调用 setPadding 来设置缩进
111+
setPadding(holder.arrowIcon, depth, -1);
112+
//根据数据改变 view 的状态(比如图标什么的)
113+
toggle(node, holder);
114+
}
115+
116+
@Override
117+
public void toggle(Object... objects) {
118+
//需要自己实现
119+
}
120+
}
121+
```
122+
123+
之后只要设置一下适配器:
124+
125+
```kotlin
126+
val adapter = FileTreeAdapter(this@MainActivity, root, R.layout.layout_file_tree_item)
127+
treeView.treeAdapter = adapter
128+
```
129+
130+
## License
131+
132+
Apache 2.0

README.md

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,58 +3,64 @@
33
[![Build Status](https://travis-ci.org/LeeReindeer/Tree2View.svg?branch=master)](https://travis-ci.org/LeeReindeer/Tree2View)
44

55
> TreeView implementation in Android.
6-
>
7-
> [数据结构课程设计](http://leezoom.xyz/2018/01/02/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1%E6%8A%A5%E5%91%8A/)
86
9-
## 主要功能 - Features
7+
[中文版](/README-ZH.md)
108

11-
|TreeView|File Explorer|
9+
## Features
10+
11+
|TreeView|File Explorer(Advanced Example)|
1212
|--------|----------|
13-
|多级分层的树结构视图 | 基本的文件管理器布局|
14-
|记忆展开状态 | 自动展开上次打开未关闭的目录|
15-
|使用适配器设计模式,用户可自定义 TreeAdapter | 对不同类型的文件显示不同的Icon |
16-
|动态增删节点 | 删除和添加文件后可自动刷新状态 |
17-
|选择模式 | 长按节点进行文件操作(Copy, Cut, Rename, Delete) |
18-
|动画支持,内置增删节点的动画 | 增删文件时带有动画 |
13+
|Multi-level tree view | Basic file manager layout|
14+
|Remember expansion state | Automatically expand the last unclosed directory|
15+
|Customize TreeAdapter | Different types of documents show different Icon |
16+
|Dynamic add and delete nodes | refresh status after delete and add files |
17+
|Select listener | Long press node for file operations (Copy, Cut, Rename, Delete) |
18+
|Animation support | Add or delete files with animation |
1919

20+
You can also see [a more simple example](/demo/app/src/main/java/xyz/leezoom/tree2view_demo/MainActivity.java).
2021

21-
## 实现原理 - Implement
22+
## Implement
2223

23-
- TreeView 继承自 ListView
24+
- TreeView extends from ListView.
2425

25-
- DFS遍历可展开的树节点,转化为List 与 [TreeAdapter](https://github.com/LeeReindeer/Tree2View/blob/master/treeview/src/main/java/xyz/leezoom/view/treeview/adapter/TreeAdapter.java) 进行适配。
26+
- DFS travel the expandable tree node, and convert it to List which adapt with [TreeAdapter](https://github.com/LeeReindeer/Tree2View/blob/master/treeview/src/main/java/xyz/leezoom/view/treeview/adapter/TreeAdapter.java).
2627

27-
- 分级的视觉效果通过 [SimpleTreeAdapter](https://github.com/LeeReindeer/Tree2View/blob/master/treeview/src/main/java/xyz/leezoom/view/treeview/adapter/SimpleTreeAdapter.java)(通过对不同深度的节点设置不同的**缩进**)来实现的。
28+
- Use [SimpleTreeAdapter](https://github.com/LeeReindeer/Tree2View/blob/master/treeview/src/main/java/xyz/leezoom/view/treeview/adapter/SimpleTreeAdapter.java) ot set different indentation on nodes of different depths.
2829

29-
- 使用 [DefaultTreeNode](https://github.com/LeeReindeer/Tree2View/blob/master/treeview/src/main/java/xyz/leezoom/view/treeview/module/DefaultTreeNode.java) 来(用链表保存子节点)增删节点。这样就实现了视觉效果和数据结构统一的设计。
30+
- Use LinkedList to store node's children, see [DefaultTreeNode](https://github.com/LeeReindeer/Tree2View/blob/master/treeview/src/main/java/xyz/leezoom/view/treeview/module/DefaultTreeNode.java).
3031

31-
## 效果预览 - Preview
32+
## Preview
3233

3334
![](https://github.com/LeeReindeer/Tree2View/blob/master/screenshot/tree2view_demo1.png)
3435

3536
![](https://github.com/LeeReindeer/Tree2View/blob/master/screenshot/tree2view_demo2.png)
3637

37-
## 下载 - Download
38+
## Download
39+
40+
> To-do: upload to jCenter.
3841
39-
> 未上传到 `jCenter()`,可直接clone本项目使用。
42+
1. But now, you can just clone this repo to use Tree2View.
4043

4144
```git
4245
git clone git@github.com:LeeReindeer/Tree2View.git
4346
```
4447

45-
Then open your project in Android Studio, then Click `FIle` -> `New` -> `Import Module`, to import this
48+
2. Open your project in Android Studio, then Click `FIle` -> `New` -> `Import Module`, to import this
4649
module.
4750

48-
And add dependence in your `build.gradle`
51+
3. Add dependence in your `build.gradle`
4952
```groovy
5053
implementation project(path: ':treeview')
54+
//or
55+
compile project(path: ':treeview')
5156
```
5257

53-
## 使用 - Usage
58+
## Usage
59+
60+
1. Add in your xml:
5461

5562
Feel free to use it as `ListView`.
5663

57-
XML:
5864
```xml
5965
<xyz.leezoom.view.treeview.TreeView
6066
android:id="@+id/tree_view"
@@ -67,20 +73,27 @@ XML:
6773
</xyz.leezoom.view.treeview.TreeView>
6874
```
6975

70-
Kotlin(Java is similar whit it)
76+
2. Add children in Kotlin code(Java is similar whit it)
7177
```kotlin
7278
var root :DefaultTreeNode? = DefaultTreeNode("Root")
73-
val treeView = TreeView(this@MainActivity, root)
79+
tree_view.root = root
7480
val child1 = DefaultTreeNode("Child1")
7581
val child2 = DefaultTreeNode("Child2")
7682
// After create a node your should immediately add it.
7783
root.addChild(child1)
7884
root.addChild(child2)
7985
val child3 = DefaultTreeNode("Child3")
8086
child1.addChild(child3)
87+
//whether the root's children is expanded by default
88+
tree_view.isRootVisible = true
89+
//animation
90+
tree_view.isDefaultAnimation = true
8191
```
92+
3. Add click listener and select listener
93+
94+
Tree2View has a default click listener, but it's ok to add your own.You can refer to [here](https://github.com/LeeReindeer/Tree2View/blob/master/app/src/main/java/xyz/leezoom/tree2/activity/MainActivity.kt#L111).
8295

83-
If you want to use customized item view, you should implement `TreeAapater`, like this:
96+
4. If you want to use customized item view, you should implement `TreeAapater`, like this:
8497
```java
8598
public class FileTreeAdapter extends TreeAdapter<FileItem> {
8699
//resourceId is your customized view resourceId, please use RelativeLayout, and let view neighbour.

treeview/src/main/java/xyz/leezoom/view/treeview/TreeView.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ public String travelNodeList(DefaultTreeNode first) {
159159
* @return array of <code>TreeNode</code>
160160
*/
161161
public TreeNode[] getFullPath() {
162-
// TODO: 12/14/17 bfs
163162
return (TreeNode[]) TreeUtils.getAllNodesB(root).toArray();
164163
}
165164

0 commit comments

Comments
 (0)