Android

关注公众号 jb51net

关闭
首页 > 软件编程 > Android > Android GridView组件

Android简单实用的可拖拽GridView组件分享

作者:岛上码农

在我们日常开发中,使用 GridView 这种网格视图的场合还是不少的,本篇我们来介绍一个支持拖拽的 GridView 组件,可以轻松搞定网格视图的拖拽排序,需要的可以参考一下

前言

在我们日常开发中,使用 GridView 这种网格视图的场合还是不少的,比如照片墙、九宫格等等。有一个场景就是需要对网格的元素进行拖拽排序,这个时候 Flutter 自带的GridView 就无法满足了。本篇我们来介绍一个支持拖拽的 GridView 组件,可以轻松搞定网格视图的拖拽排序,这个组件就是 flutter_draggable_gridview

GraggableGridView 使用

flutter_draggable_gridview使用一个DraggableGridViewBuilder来构建可拖拽的 GridView,内部实际上还是基于 GridView 实现的,因此 GridView 的一些配置还是可以沿用。DraggableGridViewBuilder的一些特有的属性如下:

正常使用的时候,基本上我们把这些属性设置好就能用了。比如下面的代码:

DraggableGridViewBuilder(
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 2,
    childAspectRatio: MediaQuery.of(context).size.width /
        (MediaQuery.of(context).size.height / 3),
  ),
  children: _makeGridItems(12),
  isOnlyLongPress: true,
  dragCompletion:
      (List<DraggableGridItem> list, int beforeIndex, int afterIndex) {
    if (kDebugMode) {
      print('onDragAccept: $beforeIndex -> $afterIndex');
    }
  },
  dragFeedback: (List<DraggableGridItem> list, int index) {
    return SizedBox(
      width: 200,
      height: 150,
      child: list[index].child,
    );
  },
  dragStartBehavior: DragStartBehavior.start,
  dragPlaceHolder: (List<DraggableGridItem> list, int index) {
    return PlaceHolderWidget(
      child: Container(
        color: Colors.blue[100],
      ),
    );
  },
)

这里的_makeGridItems方法就是构建子元素列表的方法,实际上就是用DraggableGridItem包裹一层要显示的组件。

List<DraggableGridItem> _makeGridItems(int count) {
  var colors = [
    Colors.blue,
    Colors.red[400],
    Colors.amber,
    Colors.orange,
    Colors.purple
  ];
  return List.generate(
    count,
    (index) => DraggableGridItem(
      isDraggable: true,
      child: Container(
        color: colors[index % colors.length],
        child: Center(
          child: Material(
            color: Colors.transparent,
            child: Text('$index'),
          ),
        ),
      ),
    ),
  );
}

DraggableGridItem还有两个参数可以供我们使用:

我们有了上面的框架后,大部分情况下,只需要控制要显示的子元素和尺寸就可以了,比如我们换成图片,只需要更改_makeGridItems,将DraggableGridItemchild 的子组件更换为图片组件就搞定了。

List<DraggableGridItem> _makeGridItems(int count) {
  var assetsName = [
    'images/earth.jpeg',
    'images/fire.png',
    'images/girl.jpeg',
    'images/island-coder.png',
    'images/mb.jpeg'
  ];
  return List.generate(
    count,
    (index) => DraggableGridItem(
      isDraggable: true,
      dragCallback: (_, isDragging) {
        debugPrint('{$index}在拖拽:{$isDragging}');
      },
      child: Image.asset(
        assetsName[index % assetsName.length],
        fit: BoxFit.cover,
      ),
    ),
  );
}

总结

本篇向大家推荐了一款简单实用的可拖拽 GridView 组件,基本上可以满足我们大部分支持拖拽的网格视图应用。大家如果有用过类似的组件,也欢迎在评论区推荐一下。

以上就是Android简单实用的可拖拽GridView组件分享的详细内容,更多关于Android GridView组件的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文