【问题标题】:Simple image gallery with HorizontalScrollView带有 Horizo​​ntalScrollView 的简单图片库
【发布时间】:2014-12-20 14:36:11
【问题描述】:

我正在编写一个水平滚动的图片库。必须以编程方式添加图像。 我使用自定义水平滚动视图来处理和添加图像,如下代码所示:

    public void setViewList(Integer linearLayoutId, Integer[] imageIdList,
                            Activity activity) {

    displayMetrics = ImageUtils.getDisplayMetric(activity);

    LinearLayout ll = (LinearLayout) findViewById(linearLayoutId);
    for (Integer imgId : imageIdList) {
        ImageView imageView = new ImageView(getContext());

        imageView.setImageResource(imgId);
        imageView.setScaleType(ImageView.ScaleType.MATRIX);

        Integer[] displayMetrics = ImageUtils.getDisplayMetric(activity);
        ImageUtils.scaleImage(imageView, displayMetrics[0], displayMetrics[1]);

        Integer[] dstDimension = ImageUtils.createDimension();
        ImageUtils.getImageSize(imageView, dstDimension);
        getImageSizeList().add(dstDimension);

        ll.addView(imageView);
    }

}

如您所见,我使用以下方法缩放图像(调用ImageUtils.scaleImage(imageView, displayMetrics[0], displayMetrics[1])):

    public static void scaleImage(ImageView imView, int screenWidth, int screenHeight) {
    Drawable temp = imView.getDrawable();

    Bitmap imBitmap = ((BitmapDrawable)temp).getBitmap();

    int imWidth = imBitmap.getWidth();
    int imHeight = imBitmap.getHeight();

    float xScale = ((float) screenWidth) / imWidth;
    float yScale = ((float) screenHeight) / imHeight;

    float scale = xScale <= yScale ? xScale : yScale;
    Matrix scaleMatrix = new Matrix();
    scaleMatrix.postScale(scale, scale);

    Bitmap scBitmap = Bitmap.createBitmap(imBitmap, 0, 0, imWidth, imHeight, scaleMatrix, true);

    BitmapDrawable scDrBitmap = new BitmapDrawable(imView.getResources(), scBitmap);
    imView.setImageDrawable(scDrBitmap);
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT
    );

    layoutParams.gravity = Gravity.CENTER;

    imView.setLayoutParams(layoutParams);
}

我的 main.xml 布局非常简单:

<?xml version="1.0" encoding="utf-8"?>
<android.lessons.custom_horizontal_scroll.CustomHorizontalScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/horizontalScrollView"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <LinearLayout android:orientation="horizontal"
                  android:id="@+id/mainLayout"
                  android:layout_gravity="center"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"/>
</android.lessons.custom_horizontal_scroll.CustomHorizontalScrollView>

其中 android.lessons.custom_horizo​​ntal_scroll.CustomHorizo​​ntalScrollView 是一个简单的自定义 Horizo​​ntalScrollView 的实现。

为了测试,我使用三星 Galaxy S3 和以下分辨率的图像:(1) 1290*990 (2) 1221*900。它的样子:

在许多情况下,一切都显示得很好,但有时我会得到错误的结果:第一个图像在应用程序启动时将屏幕与下一个图像分开,我不知道为什么会发生这种情况。

感谢您的帮助。

【问题讨论】:

    标签: java android android-imageview image-gallery samsung-mobile


    【解决方案1】:

    我认为您应该使用支持库 v4 中的ViewPager,而不是在这种情况下使用此自定义水平滚动视图。它就是为此目的而设计的。

    这里是如何使用它https://developer.android.com/training/animation/screen-slide.html

    【讨论】:

    • 是的!这样可行。非常感谢。但问题仍然悬而未决:)
    【解决方案2】:

    问题已通过使用重力 = Gravity.FILL_HORIZONTAL | 得到解决Gravity.CENTER_VERTICAL,我以编程方式在图像视图上设置(方法 ImageUtils.scaleImage)。

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多