Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android GridView在手势/滑动时选择多个项目_Android_Android Layout_Listview_Gridview_Gesture - Fatal编程技术网

Android GridView在手势/滑动时选择多个项目

Android GridView在手势/滑动时选择多个项目,android,android-layout,listview,gridview,gesture,Android,Android Layout,Listview,Gridview,Gesture,我想在向左或向右滑动的gridview中选择多个项目。现在,向左或向右滑动只对单个项目有效,而我希望在滑动时选择多个项目,直到滑动为止。我知道这里调用了onFling方法。以下是stackoverflow中的其他答案,我使用了以下代码: import android.support.v4.view.GestureDetectorCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; im

我想在向左或向右滑动的gridview中选择多个项目。现在,向左或向右滑动只对单个项目有效,而我希望在滑动时选择多个项目,直到滑动为止。我知道这里调用了onFling方法。以下是stackoverflow中的其他答案,我使用了以下代码:

import android.support.v4.view.GestureDetectorCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.GridView;

public class MainActivity extends AppCompatActivity {

    private GestureDetectorCompat detector;

    static final String[] numbers = new String[] {
            "A", "B", "C", "D", "E",
            "F", "G", "H", "I", "J",
            "K", "L", "M", "N", "O",
            "P", "Q", "R", "S", "T",
            "U", "V", "W", "X", "Y", "Z"};


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        GridView gridView = (GridView) findViewById(R.id.gridView);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, numbers);

        gridView.setAdapter(adapter);

        detector = new GestureDetectorCompat(this, new MyGestureListener());


        gridView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                detector.onTouchEvent(event);
                return false;
            }

        });
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        detector.onTouchEvent(event);
        return super.onTouchEvent(event);
    }

    class MyGestureListener extends GestureDetector.SimpleOnGestureListener {

        private static final int SWIPE_THRESHOLD = 100;
        private static final int SWIPE_VELOCITY_THRESHOLD = 100;

        @Override
        public boolean onDown(MotionEvent event) {
            return true;
        }

        @Override
        public boolean onFling(MotionEvent event1, MotionEvent event2,
                               float velocityX, float velocityY) {

            float diffY = event2.getY() - event1.getY();
            float diffX = event2.getX() - event1.getX();
            if (Math.abs(diffX) > Math.abs(diffY)) {
                if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                    if (diffX > 0) {
                        onSwipeRight();
                    } else {
                        onSwipeLeft();
                    }
                }
            } else {
                if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                    if (diffY > 0) {
                        onSwipeBottom();
                    } else {
                        onSwipeTop();
                    }
                }
            }
            return true;
        }
    }

    private void onSwipeLeft() {
        Log.d("left", "clicked!");
    }

    private void onSwipeRight() {
        Log.d("right", "clicked!");
    }

    private void onSwipeTop() {
        Log.d("top", "clicked!");
    }

    private void onSwipeBottom() {
        Log.d("bottom", "clicked!");
    }
}
导入android.support.v4.view.GestureDetectorCompat;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.GestureDetector;
导入android.view.MotionEvent;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.GridView;
公共类MainActivity扩展了AppCompatActivity{
私人手势检测器兼容检测器;
静态最终字符串[]编号=新字符串[]{
“A”、“B”、“C”、“D”、“E”,
“F”、“G”、“H”、“I”、“J”,
“K”、“L”、“M”、“N”、“O”,
“P”、“Q”、“R”、“S”、“T”,
“U”、“V”、“W”、“X”、“Y”、“Z”};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView GridView=(GridView)findViewById(R.id.GridView);
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,数字);
setAdapter(适配器);
detector=new GestureDetectorCompat(这是new MyGestureListener());
gridView.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
探测器。开孔(事件);
返回false;
}
});
}
@凌驾
公共布尔onTouchEvent(运动事件){
探测器。开孔(事件);
返回super.onTouchEvent(事件);
}
类MyGestureListener扩展了GestureDetector.SimpleOnGestureListener{
专用静态最终整数滑动\u阈值=100;
专用静态最终整数滑动速度阈值=100;
@凌驾
公共布尔onDown(运动事件){
返回true;
}
@凌驾
公共布尔onFling(MotionEvent1、MotionEvent2、,
浮动速度x,浮动速度y){
float diffY=event2.getY()-event1.getY();
float diffX=event2.getX()-event1.getX();
if(Math.abs(diffX)>Math.abs(diffY)){
if(Math.abs(diffX)>SWIPE\u阈值和&Math.abs(velocityX)>SWIPE\u阈值){
如果(扩散>0){
onswipright();
}否则{
onswipleft();
}
}
}否则{
if(数学abs(diffY)>滑动_阈值&数学abs(velocityY)>滑动_阈值){
if(diffY>0){
onSwipeBottom();
}否则{
顶部();
}
}
}
返回true;
}
}
私有void onswipleft(){
Log.d(“左”,“点击!”);
}
私有无效权(){
Log.d(“右键”,“单击!”);
}
私有void onswiptop(){
Log.d(“顶部”,“单击!”);
}
私有void onsweepbooth(){
Log.d(“底部”,“单击!”);
}
}