FreeSizeDraggableLayout

Introduction: 一个可自定义子控件大小及位置、相等大小的子控件间可通过拖动交换位置的 ViewGroup
More: Author   ReportBugs   DemoAPK   
Tags:
ViewGroup-自定义-控件尺寸-控件位置-

A viewgroup enable custom size of childviews and change their position which has same size by drag


Analyze

FreeSizeDraggableLayout 实现过程解析

Demo

FreeSizeDraggableLayout

Download Demo

Usage


Gradle

dependencies {
   compile 'com.miao:freesizedraggablelayout:0.0.2'
}

Maven

<dependency>
  <groupId>com.miao</groupId>
  <artifactId>freesizedraggablelayout</artifactId>
  <version>0.0.2</version>
  <type>pom</type>
</dependency>

Use it in your own code:

1.create the viewgroup on your xml:

    <com.miao.freesizedraggablelayout.FreeSizeDraggableLayout
        android:id="@+id/fsd_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

2.set the viewgroup and set the size of it

FreeSizeDraggableLayout fsdLayout = (FreeSizeDraggableLayout) findViewById(R.id.fsd_layout);
fsdLayout.setUnitWidthNum(4);
fsdLayout.setUnitHeightNum(4);

3.create a DetailView list:

List<DetailView> list = new ArrayList<>();
/*
DetailView:
public DetailView(Point p, int width, int height, View v) {
    setPoint(p);
    setWidhtNum(width);
    setHeightNum(height);
    setView(v);
}
*/
list.add(new DetailView(new Point(0, 0), 2, 2, createButton(1)));
list.add(new DetailView(new Point(2, 0), 2, 2, createButton(2)));
list.add(new DetailView(new Point(0, 2), 2, 2, createButton(3)));
list.add(new DetailView(new Point(2, 2), 2, 2, createButton(4)));
/*
private Button createButton(int i) {
    final Button btn = new Button(getApplicationContext());
    btn.setText("Button - " + i);
    btn.setBackgroundColor(Color.BLACK);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), btn.getText(), Toast.LENGTH_SHORT).show();
        }
    });
    return btn;
}
*/

4.set the list as ViewGroup's datasource

freeSizeDraggableLayout.setList(list);

PS: Function of change position between group position and draggled item(in v0.0.1, we can just change two view has the same size, we can change the position of whole group of views and the view dragged if they have the same size in v0.0.2. just like the third scenario in demo) is added in version 0.0.2, set it disable if you don't need it:

freeSizeDraggableLayout.setGroupChangeEnable(false);
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools