我有以下布局,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>
但由于图片大于LinearLayout
,FrameLayout
被拉伸。
我只想显示图像的顶部(由蓝色选择矩形表示),因此FrameLayout
的高度应该是LinearLayout
的高度。这可能不会裁剪图像本身吗?
答案 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);