【问题标题】:Android Gridview : Drag an itemAndroid Gridview:拖动一个项目
【发布时间】:2013-12-19 10:59:30
【问题描述】:

我感谢那些试图帮助我的人,这对我来说非常重要......

我正在尝试为网格视图内的项目实现拖动,我在互联网上看到了很多示例但无法理解:/

我的 xml 中有一个带有不同图像的 gridview:

<GridView 
android:id="@+id/contenedorPictogramas"
android:layout_width="780dp" 
android:layout_height="520dp"
android:columnWidth="160dp"
android:numColumns="auto_fit"
android:verticalSpacing="20dp"
android:horizontalSpacing="20dp"
android:stretchMode="columnWidth"
android:gravity="center"
android:background="@drawable/shape"
/>

我使用了一种我用来拖动其他图像的方法:

private final class MyTouchListener implements OnTouchListener {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
      if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
        ClipData data = ClipData.newPlainText("", "");
        DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
        view.startDrag(data, shadowBuilder, view, 0);
        view.setVisibility(View.INVISIBLE);
        return true;
      } else {
        return false;
      }
    }
  }

为了将图像设置到网格视图中,我尝试这样做:

GridView gridview = (GridView) findViewById(R.id.contenedorPictogramas);
gridview.setOnTouchListener(new OnTouchListener() {         
      public boolean onTouch(View arg0, MotionEvent arg1) {
          arg0.setOnTouchListener(new MyTouchListener());//HERE IS THE PROBLEM (I THING)
          return false;
      }
  });

但我拖动 gridview 的所有项目:/

【问题讨论】:

    标签: java android gridview draggable drag


    【解决方案1】:

    您应该为网格视图项目设置 on touch 监听器而不是在网格视图上。

    您可以在适配器的 getview 方法中添加触摸监听器。

    样本-

    public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView;
            if (convertView == null) {  // if it's not recycled, initialize some attributes
                imageView = new ImageView(mContext);
                imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                imageView.setPadding(8, 8, 8, 8);
            } else {
                imageView = (ImageView) convertView;
            }
    
            imageView.setImageResource(mThumbIds[position]);
    **imageView.setOnTouchListener(<your listener>);**
            return imageView;
        }
    

    【讨论】:

    • 感谢您的回答。我是这么想的,但我不知道如何设置项目,我试图设置一个项目但我做不到:gridview.getItemAtPosition(1).setOnTouchListener(new MyTouchListener());你知道我该怎么做吗?
    • 在您的网格适配器的 getView() 中。参考已编辑的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多