簡體   English   中英

使用Horizo​​ntalScrollView的簡單圖像庫

[英]Simple image gallery with HorizontalScrollView

我正在用水平滾動寫一個圖庫。 必須以編程方式添加圖像。 我使用自定義水平滾動視圖來處理和添加圖像,如以下代碼所示:

    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的實現。

為了測試,我使用Samsung Galaxy S3和以下分辨率的圖像:(1)1290 * 990(2)1221 * 900。 看起來像什么:

在此處輸入圖片說明

在許多情況下,所有內容都可以很好地顯示,但有時我會得到錯誤的結果:第一張圖片在應用啟動時將屏幕划分為下一張,而我不知道為什么會發生。

感謝幫助。

我認為您在這種情況下應該使用支持庫v4中的ViewPager而不是此自定義水平滾動視圖。 它是為此目的而設計的。

這是使用方法https://developer.android.com/training/animation/screen-slide.html

使用重力= Gravity.FILL_HORIZONTAL解決了該問題。 Gravity.CENTER_VERTICAL,我以編程方式在圖像視圖上設置(方法ImageUtils.scaleImage)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM