Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.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 安卓-显示固定图像网格(带有表格布局?)_Android_Android Imageview_Android Tablelayout_Android Gridlayout - Fatal编程技术网

Android 安卓-显示固定图像网格(带有表格布局?)

Android 安卓-显示固定图像网格(带有表格布局?),android,android-imageview,android-tablelayout,android-gridlayout,Android,Android Imageview,Android Tablelayout,Android Gridlayout,我试图显示一个网格的图像,我知道在执行时它们会有多少。我的问题是,这个网格必须位于垂直滚动视图和ViewPager中,因此不建议将两个可滚动视图一个放置在另一个视图中,我不能使用水平网格布局,因为我位于ViewPager中,所以水平滚动已经停止。 因此,我尝试使用TableLayout实现这一点,并使用一些数学方法手动设置所有填充/边距/尺寸。我得到的是: 我能做些什么来实现这些结果吗 可能使用固定高度和宽度的网格布局 到目前为止,我编写的填充TableLayout的代码报告如下。它在一个片

我试图显示一个网格的图像,我知道在执行时它们会有多少。我的问题是,这个网格必须位于垂直滚动视图和ViewPager中,因此不建议将两个可滚动视图一个放置在另一个视图中,我不能使用水平网格布局,因为我位于ViewPager中,所以水平滚动已经停止。

因此,我尝试使用TableLayout实现这一点,并使用一些数学方法手动设置所有填充/边距/尺寸。我得到的是:

我能做些什么来实现这些结果吗

可能使用固定高度和宽度的网格布局

到目前为止,我编写的填充TableLayout的代码报告如下。它在一个片段中,act是对活动的引用,table_视图是我的TableLayout,ObjectId是一个包含要使用的图像ID的链接列表

private void calculateGrid() {
    table_view.removeAllViews();
    table_view.setVisibility(View.VISIBLE);

    int minLato = Math.min(act.metrics.widthPixels, act.metrics.heightPixels);

    float density = act.metrics.density;
    int screenX = (int) (minLato / act.metrics.density);
    float factor = 4f;
    int imageXpx = (int) (minLato / factor);
    int imageX = (int) (imageXpx / act.metrics.density);

    int margins;
    int numImage = objectids == null ? 0 : objectids.size();
    int numRow;
    int numCol;
    int gridY; // = ?
    int countImg = 1;

    if (screenX % imageX == 0) { // TODO poi sarà un po piu di 0 per non avere margini minuscoli
        numCol = screenX / imageX - 1;
        margins = imageX / (screenX / imageX);
    } else {
        numCol = screenX / imageX;
        margins = (screenX % imageX) / (screenX / imageX + 1);
    }

    margins = Math.min(10, margins);

    int dpMargins = (int) (margins * density);

    numRow = (int) Math.ceil(numImage / (double) numCol);

    gridY = numRow * (margins * 2 + imageX);

    Log.e(TAG, "dens: " + density + " screen: " + screenX + " img: " + imageX + " margins: " + margins + " numImg: " + numImage + " numRow: " + numRow
            + " numCol" + numCol + " gridY: " + gridY);

    List<TableRow> rows = new LinkedList<TableRow>();
    int ID = 1000;
    TableRow oneRow;

    TableLayout.LayoutParams tableParams = new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT);
    tableParams.gravity = Gravity.CENTER;

    for (int i = 1; i <= numRow; i++) {
        Log.d(TAG, "row " + i);
        oneRow = new TableRow(ctx);
        oneRow.setLayoutParams(tableParams);
        for (int k = 1; k <= numCol; k++) {
            Log.d(TAG, "col " + k);
            if (countImg <= numImage) {
                Log.i(TAG, "img " + countImg);
                ImageView img = new ImageView(ctx);

                TableRow.LayoutParams rp = new TableRow.LayoutParams(imageXpx, imageXpx);
                rp.bottomMargin = dpMargins;
                rp.topMargin = dpMargins;
                rp.leftMargin = dpMargins;
                rp.rightMargin = dpMargins;

                img.setLayoutParams(rp);
                img.setId(ID + countImg);

                img.setScaleType(ImageView.ScaleType.CENTER_CROP);
                loadBitmaps(ctx, app.getDatabase(), img, objectids.get(countImg - 1), "image", target_graphid, ticket);

                img.setImageResource(R.drawable.capiicona);
                oneRow.addView(img);
                countImg++;
            }
        }
        rows.add(oneRow);
    }

    for (TableRow tr : rows)
        table_view.addView(tr);

    table_view.setGravity(Gravity.CENTER_HORIZONTAL)

}
谢谢你宝贵的帮助