首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android GridView多选

Android GridView多选
EN

Stack Overflow用户
提问于 2013-04-16 16:56:31
回答 1查看 1.2K关注 0票数 2

我想做一个GridView布局的活动。我将能够在网格视图的元素上拖动手指来选择多个项目(比如Ruzzle )。当我举起手指时,我必须表明我已经被选中了多少个项目。

EN

回答 1

Stack Overflow用户

发布于 2013-09-29 06:52:13

我知道这是一个古老的问题,但最近我们遇到了同样的问题,我们想出了一些东西。

假设您想要将单元格的颜色更改为绿色。您只需要调用GridView.setOnTouchListener并实现一个类似如下的OnTouchListener

...
private final int SELECTED_CELL_COLOR = Color.GREEN;
private int mPosition = GridView.INVALID_POSITION;
private boolean mSelecting = false;
...
@Override
public boolean onTouch(View v, MotionEvent event) {
    int action = event.getActionMasked();
    switch (action){
    case MotionEvent.ACTION_DOWN:
    case MotionEvent.ACTION_MOVE:
    case MotionEvent.ACTION_UP:
        int x = (int)event.getX();
        int y = (int)event.getY();
        GridView grid = (GridView)v;
        int position = grid.pointToPosition(x, y);
        if(position != GridView.INVALID_POSITION) {
            v.getParent().requestDisallowInterceptTouchEvent(true); //Prevent parent from stealing the event
            View cellView = (View)grid.getItemAtPosition(position);
            switch (action){
            case MotionEvent.ACTION_DOWN:
                mSelecting = true;
                mPosition = position;
                cellView.setBackgroundColor(SELECTED_CELL_COLOR);
                break;
            case MotionEvent.ACTION_MOVE:
                if (mPosition != position) {
                    mPosition = position;
                    cellView.setBackgroundColor(SELECTED_CELL_COLOR);
                } else {
                    //Repeated cell, noop
                }
                break;
            case MotionEvent.ACTION_UP:
                mSelecting = false;
                mPosition = GridView.INVALID_POSITION;
                //Here you could call a listener, show a dialog or similar
                break;
            }
        }else{
            if(mSelecting){
                mSelecting = false;
            }
        }
    break;
    case MotionEvent.ACTION_CANCEL:
        mSelecting = false;
        break;
    }
    return true;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16032727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档