0

我想创建一个带架子的 GridView。我为此创建了一个类:

public class ShelveGridView extends GridView{

private Bitmap background;

public ShelveGridView(Context context, AttributeSet attrs) {
    super(context, attrs);
    background = BitmapFactory.decodeResource(getResources(), R.drawable.bibliotca_image_shelf);
}

@Override
protected void dispatchDraw(Canvas canvas) {
    int count = getChildCount();
    int top = count < 0 ? getChildAt(0).getTop() : 0;
    int backgroundWidth = background.getWidth();
    int backgroundHeight = background.getHeight();
    int width = getWidth();
    int height = getHeight();

    for (int x = 0; x < width; x += backgroundWidth) 
          for (int y = top; y < height; y += backgroundHeight) 
            canvas.drawBitmap(background, x, y, null);


    super.dispatchDraw(canvas);
}...

但是当我滚动 GridView 时,货架不会移动。我想我必须在这个类中覆盖一些方法来在我滚动时移动位图背景。有什么建议吗?

4

1 回答 1

2

你没有正确地接近这个。以这种方式设置背景不会使其可滚动。有几种方法可以使背景滚动:

  1. 将一个书架设置为列表项的背景
  2. 将水平架子设置为分隔图像,并将架子的背面设置为列表项的图像。
  3. 将水平架子设置为分隔图像,并将架子的背面设置为列表视图的背景(就像您现在对整个架子图像所做的那样)。

方法 3 将产生最接近的结果,这就是苹果 iBooks 的工作方式。

于 2013-04-11T11:03:40.693 回答