【问题标题】:Problems with Gallery.getChildAt(int position)Gallery.getChildAt(int position) 的问题
【发布时间】:2011-08-24 20:49:01
【问题描述】:

我正在尝试在 Gallery 视图上创建预览效果,但遇到了 Gallery.getChildAt(int position) 的问题,该问题大部分时间都返回 null。它应该仅在不显示子项时才返回 null ,这里不是这种情况,因为用户需要滚动它。有没有办法解决这个问题,或者我应该改变我的方法?这是我的代码:

gallery.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View view, MotionEvent event) {
            if(event.getAction()==MotionEvent.ACTION_UP){
                preview_container.setVisibility(View.GONE);
            }
            else if(event.getDownTime()>2500){
                int position = gallery.pointToPosition((int)event.getX(), (int)event.getY()); 
                if (position!=AdapterView.INVALID_POSITION){
                    View child = gallery.getChildAt(position);
                    if(child!=null){
                        Bitmap tmp_bitmap = book.imageForPreview(position);
                        previewImg.setImageBitmap(tmp_bitmap);
                        FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(tmp_bitmap.getWidth()+2, tmp_bitmap.getHeight()+2,Gravity.NO_GRAVITY);
                        int[] coord = new int[2];
                        child.getLocationOnScreen(coord);
                        int y = MMBookReader.this.getWindowManager().getDefaultDisplay().getHeight()-(tmp_bitmap.getHeight()+view.getHeight());
                        int x = (int) coord[0]-(tmp_bitmap.getWidth()-child.getWidth())/2;
                        layout.leftMargin=x;
                        layout.topMargin=y;
                        preview_container.setVisibility(View.VISIBLE);
                        preview_container.setLayoutParams(layout);
                        previewPageCount.setText(book.getMmpages().get(position).getPosition()+"/"+book.getPages());
                    }
                }
                else
                    preview_container.setVisibility(View.GONE);
            }
            return false;
        }
    });

编辑:我不是要填充画廊视图,我已经完成了这部分,并且很清楚适配器类的使用。

编辑2:通过更改行解决:

View child = gallery.getChildAt(position);

与:

View child = gallery.getChildAt( position - gallery.getFirstVisiblePosition() );

【问题讨论】:

    标签: android gallery preview effect touch-event


    【解决方案1】:

    您的问题是您假设 position 参数 getChildAt 与适配器中项目的位置相同 - 它们不是。

    getChildAt 中的位置是子视图在其父 ViewGroup 中的位置,它与您的适配器位置无关——即它从 0 运行到 getChildCount()-1

    您可以将它与getFirstVisiblePosition() 结合使用,这将返回在您的适配器中 可见的第一个项目的位置。第一个可见视图也是其父视图中的第一个子视图,因此您将传递给 getChildAt 的位置为 0

    【讨论】:

      【解决方案2】:

      您不能像这样更改画廊项目(视图)(据我所知)。 您应该在图库的适配器中更改此视图的数据并调用“notifyDataSetChange()”。然后在适配器的 getView 中,您可以根据数据更改视图的位图...(例如,您可以检查是否已加载位图,如果未加载则使用资源中的默认图像...)

      如果这不是你的意思,请澄清。你用什么样的适配器等等...

      祝你好运, 摩根大通

      【讨论】:

      • 为了填充画廊视图,我使用了一个自定义适配器,这是一个扩展了我创建的基本适配器的类。我只是想在用户滚动图库视图时显示更大的图像预览。
      • 啊,好吧,在这种情况下,我假设您应该使用 Gallery.getSelectedView() 而不是 getChildAt...?
      猜你喜欢
      • 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
      相关资源
      最近更新 更多