将图像加载到滚动视图会导致图像超出滚动视图

时间:2013-03-06 21:42:32

标签: java android xml

我正在将图像从Android Camera文件夹动态加载到水平滚动视图中。问题是滚动视图在它的末端(右侧)有一个巨大的空间,以及当我填充滚动视图(向左)时,图像被从前面的屏幕推出。加载的图像越多,滚动视图末尾的间隙越大,从前面推出的图像越多。

xml只是一个滚动视图作为父视图,一个线性布局作为子视图。

<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/scrollView1"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_gravity="center_horizontal" >
  <LinearLayout
    android:id="@+id/imageList"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="horizontal" >
  </LinearLayout>
</HorizontalScrollView>

代码使用asynctask来加载图像。

private class loadImages extends AsyncTask<Context, ImageView, Boolean> {
  @Override
  protected Boolean doInBackground(Context... params) {
    File sdCard = Environment.getExternalStorageDirectory();
    dir = new File(sdCard.getAbsolutePath() + "/DCIM/Camera");
    dir.mkdirs();
    ImageView gtbImage = null;

    if (dir.isDirectory()) {
      String[] children = dir.list();
      for (int i = 0; i < children.length; i++) {
          File imageLocation = new File(dir.getAbsolutePath() + "/" + children[i]);
          Bitmap myBitmap = decodeFile(imageLocation, 250, 250);

          gtbImage = new ImageView(getApplicationContext());
          gtbImage.setImageBitmap(myBitmap);
          imageList = (LinearLayout) findViewById(R.id.imageList);

          LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.RIGHT);
          p.setMargins(5, 5, 5, 5);


          gtbImage.setLayoutParams(p);
          gtbImage.setPadding(1, 1, 1, 1);
          gtbImage.setBackgroundColor(Color.WHITE);
          gtbImage.setScaleType(ImageView.ScaleType.FIT_CENTER);
          publishProgress(gtbImage);
      }

    }

    return null;
  }

  protected void onProgressUpdate(ImageView... v) {
    imageList.addView(v[0]);
  }

这是一张图片,可以更好地描述scrollview的结尾。注意最后的大空白点。图像越多,空间越大。

enter image description here

非常困惑的是,我确信它很简单,但我在一遍又一遍地研究之后,我已经走到了死胡同,需要一套更明智的眼光来看看:)

1 个答案:

答案 0 :(得分:0)

尝试删除android:layout_gravity="center_horizontal" xml中的HorizontalScrollView行。我曾经有过类似的问题。

相反,您应该能够按照建议hereandroid:fillViewPort="true"上使用HorizontalScrollView,或者在{android:layout_gravity="center"中同时使用android:gravity="center"LinearLayout 1}}如建议here