博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android DynamicGrid:拖曳交换位置
阅读量:7053 次
发布时间:2019-06-28

本文共 3325 字,大约阅读时间需要 11 分钟。



Android DynamicGrid:拖曳交换位置

Android DynamicGrid是一个第三方开源项目,DynamicGrid在github上的项目主页是:

它实现在一个网格布局内,拖曳任意子view实现动态的交换位置,这很类似手机的桌面,手机桌面的图标,均可自由拖曳实现摆放位置的交换,如动图所示:

DynamicGrid使用起来简单,需要注意:
(1)最好使用完全的BaseDynamicGridAdapter构造BaseDynamicGridAdapter构造函数,否则可能无法正常工作。
(2)通常以长按模式触发拖曳交换位置操作,所以一般在onItemLongClick里面startEditMode开始编辑。
(3)按返回键取消拖曳操作,代码比较固定,重写onBackPressed:

@Override    public void onBackPressed() {        //此处将取消拖曳编辑模式,取消方式为按返回键。        if (gridView.isEditMode()) {            gridView.stopEditMode();        } else {            super.onBackPressed();        }    }

给出一个完整的代码例子:

package zhangphil.app;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.TextView;import android.widget.Toast;import org.askerov.dynamicgrid.BaseDynamicGridAdapter;import org.askerov.dynamicgrid.DynamicGridView;import java.util.ArrayList;import java.util.List;public class MainActivity extends Activity {    private DynamicGridView gridView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        gridView = (DynamicGridView) findViewById(R.id.dynamicgrid);        ArrayList lists = new ArrayList();        for (int i = 0; i < 100; i++) {            lists.add("项目-" + i);        }        //最好以完全方式构造,否则可能无法正常工作        MyAdapter adapter = new MyAdapter(this, lists, 3);        gridView.setAdapter(adapter);        gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {            @Override            public boolean onItemLongClick(AdapterView
parent, View view, int position, long id) { //长按触发拖曳交换位置操作。 gridView.startEditMode(position); return true; } }); gridView.setOnDragListener(new DynamicGridView.OnDragListener() { @Override public void onDragStarted(int position) { //Toast.makeText(getApplication(), "drag started at position " + position,Toast.LENGTH_SHORT).show(); } @Override public void onDragPositionsChanged(int oldPosition, int newPosition) { Toast.makeText(getApplication(), String.format("from %d to %d", oldPosition, newPosition), Toast.LENGTH_SHORT).show(); } }); } @Override public void onBackPressed() { //此处将取消拖曳编辑模式,取消方式为按返回键。 if (gridView.isEditMode()) { gridView.stopEditMode(); } else { super.onBackPressed(); } } private class MyAdapter extends BaseDynamicGridAdapter { @Override public View getView(int i, View view, ViewGroup viewGroup) { View v = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_list_item_1, null); TextView text = (TextView) v.findViewById(android.R.id.text1); text.setText("项目-" + i); v.setPadding(10, 10, 10, 10); return v; } public MyAdapter(Context context, List
items, int columnCount) { super(context, items, columnCount); } }}

布局文件:

转载于:https://www.cnblogs.com/hehehaha/p/6147314.html

你可能感兴趣的文章
github push403错误的处理
查看>>
Hibernate与 MyBatis的比较
查看>>
关于百度地图API的地图坐标转换问题
查看>>
【操作系统】设备管理(五)
查看>>
ArcObject开发时,axtoolbarcontrol中一些添加的按钮是灰色的问题
查看>>
[LeetCode] Guess Number Higher or Lower 猜数字大小
查看>>
netbeans 快捷键
查看>>
C#实现GDI+基本图的缩放、拖拽、移动
查看>>
github-ssh
查看>>
FiddlerScript学习一:改动Request或Response
查看>>
linux下dd命令详解【转】
查看>>
JS及JQuery对Html内容编码,Html转义
查看>>
在java中如何在非servlet的普通类中获取request、response、session
查看>>
Linux Rsync
查看>>
Redis实现消息队列
查看>>
2k8 32bit下载
查看>>
密码需要带特殊字符
查看>>
个人收集的java精品网站
查看>>
Python多版本情况下四种快速进入交互式命令行的操作技巧
查看>>
如何在基于Bytom开发过程中集成IPFS
查看>>