ImaveView内部的图像大于帧,将图像顶部定位到ImageView的顶部

时间:2015-08-25 22:32:53

标签: java android listview imageview

我有一个listView行,我正在填充imageView190dp高。加载的图像非常大,因为我从网上提取它。图像为640x812。

当图像加载到imageView时,它似乎居中。但是,我希望图像的顶部与imageView的顶部对齐,以便用户可以看到图像的顶部,并在其上书写。

这就是我所拥有的:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minHeight="110dp">

    <ImageView
        android:id="@+id/viewpoint_imageView"
        android:layout_width="fill_parent"
        android:layout_height="110dp"
        android:scaleType="fitStart"
        android:src="@drawable/default_background"
        android:adjustViewBounds="true" />

    <TextView
        android:id="@+id/viewpoint_title"
        android:layout_width="fill_parent"
        android:layout_height="110dp"
        android:gravity="center"
        android:hint="16dp"
        android:lineSpacingExtra="0dp"
        android:lines="3"
        android:text="TextView"
        android:textSize="22sp"
        android:textStyle="bold"
        android:textAlignment="center"
        android:textColor="#ffffff"
        android:shadowColor="#000000"
        android:shadowDx="1"
        android:shadowDy="1"
        android:shadowRadius="2"/>

</FrameLayout>

根据我的阅读,使用fitStart是我所需要的,但这根本没有帮助。

enter image description here

3 个答案:

答案 0 :(得分:0)

正如我所知,您正在使用通用图像加载器,您需要添加以下行:

options = new DisplayImageOptions.Builder()                     
            .imageScaleType(ImageScaleType.EXACTLY).build();

在ImageView中使用此属性:

    android:layout_gravity="center"
    android:adjustViewBounds="true"
    android:scaleType="matrix"

ImageScaleType.EXACTLY使图像以正确的方式缩放。

如果要在ImageView的任何一侧对齐图像,则应使用以下行:

    android:layout_alignParentTop="true"

请注意,ImageView父级必须是RelativeLayout,因此alignParentTop属性可以工作。

答案 1 :(得分:0)

使用此imageview类。它将通过顶部

进行裁剪
    import android.content.Context;
    import android.graphics.Matrix;
    import android.widget.ImageView;

    /**
    * Imageview - Displaying top-crop scale of imageview
    * @author Fthcmz
    */
    public class TopCropImageView extends ImageView {

    public TopCropImageView(Context context) {
        super(context);
        setScaleType(ScaleType.MATRIX);
    }

    @Override
    protected boolean setFrame(int l, int t, int r, int b) {
        final Matrix matrix = getImageMatrix();

        float scale;
        final int viewWidth = getWidth() - getPaddingLeft() - getPaddingRight();
        final int viewHeight = getHeight() - getPaddingTop() - getPaddingBottom();
        final int drawableWidth = getDrawable().getIntrinsicWidth();
        final int drawableHeight = getDrawable().getIntrinsicHeight();

        if (drawableWidth * viewHeight > drawableHeight * viewWidth) {
            scale = (float) viewHeight / (float) drawableHeight;
        } else {
            scale = (float) viewWidth / (float) drawableWidth;
        }

        matrix.setScale(scale, scale);
        setImageMatrix(matrix);

        return super.setFrame(l, t, r, b);
    }        
    }

答案 2 :(得分:0)

将图像视图的比例类型用作FIT_CENTER