ImageView wrap_content - 如何裁剪图像

时间:2015-02-17 17:21:16

标签: android layout imageview

我有以下布局,FrameLayout顶部有ImageView嵌套LinearLayout

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/background_circus"
        android:scaleType="fitXY"
        android:adjustViewBounds="true"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:orientation="vertical"
        android:padding="16dp">

        <ImageView
            android:layout_width="110dp"
            android:layout_height="110dp"
            android:layout_marginBottom="16dp"
            android:layout_gravity="center_horizontal"
            android:src="@drawable/logo_star"
            />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="XXXXXXXXXX"
            android:textColor="@android:color/white"
            android:textSize="36dp"
            android:fontFamily="sans-serif"
            />

    </LinearLayout>

</FrameLayout>

但由于图片大于LinearLayoutFrameLayout被拉伸。

enter image description here

我只想显示图像的顶部(由蓝色选择矩形表示),因此FrameLayout的高度应该是LinearLayout的高度。这可能不会裁剪图像本身吗?

2 个答案:

答案 0 :(得分:0)

在图片视图中设置属性android:scaleType="fitXY"以适合ImageView或android:scaleType="centerCrop"进行裁剪。

答案 1 :(得分:0)

我最好的建议是使用aClipDrawable包装你的BitmapDrawable。

ClipDrawable允许您为任何其他drawable定义剪裁,因此不会绘制整个drawable,而只会绘制其中的一部分。

那怎么办?您的ImageView可以显示一个drawable - 可通过setImageDrawable()进行赋值。当然,您可以在其中放置图像位图的BitmapDrawable。如果你首先使用ClipDrawable包装你的BitmapDrawable,然后只分配给ImageView,你应该没问题。

<ImageView
 android:id="@+id/imageView1"
 android:layout_width="100dp"
 android:layout_height="100dp"
 android:src="@drawable/clip_source" 
/>

这是clip_source drawable:

  <?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
     android:clipOrientation="vertical"
     android:drawable="@drawable/your_own_drawable"
     android:gravity="top" />

您可以通过调用ClipDrawable(clip_source)上的functionsetLevel()来定义裁剪量。级别0表示图像完全隐藏,级别10000表示图像完全显示。您可以在中间使用任何int值。

您必须在代码中设置级别,因此您的代码应该首先获得对ClipDrawable的引用。您可以通过在ImageView实例上运行getDrawable()来完成此操作。当你有一个ClipDrawable的引用时,只需在它上面运行setLevel(5000)(或任何其他数字0-10000)。

 ImageView img = (ImageView) findViewById(R.id.imageView1);
     mImageDrawable = (ClipDrawable) img.getDrawable();
     mImageDrawable.setLevel(5000);