使用 LayerDrawable 相互堆叠的图像数组。(在单个图像视图中显示多个图像)

Posted

技术标签:

【中文标题】使用 LayerDrawable 相互堆叠的图像数组。(在单个图像视图中显示多个图像)【英文标题】:Array of images stacked next to each other, using LayerDrawable.(Displaying multiple image in single imageview) 【发布时间】:2013-11-27 13:00:31 【问题描述】:

我有 5 张图片,我需要一个接一个地显示这个水平间隔。我不想使用 5 个不同的图像在具有水平方向的 LinearLayout 中显示这 5 个图像,而是使用单个图像视图。使用 LayerDrawable 我可以做到这一点吗?如果是怎么办?

我只想像下面的示例那样放置图像,其中“问题”、“标签”、“用户”、“徽章”、“未回答”中的每一个都是图像。

【问题讨论】:

myandroidtipsandtricks.blogspot.in/2012/09/… @AM ,在我的情况下,所有图像的大小都相同。我还能达到我的需要吗? 在我的列表视图中,列表视图的行必须根据条件显示彼此相邻的 1 到 5 个图像。拥有 1 到 5 个图像视图正在达到滚动性能 developer.android.com/reference/android/graphics/drawable/… ....试试这个可能对你有帮助 如果您在此列表中尝试水平滚动视图...这是一个好方法...我想...如果您需要点击那 5 张图片 【参考方案1】:

我找到了答案,我就是这样做的

每张图片的尺寸为 48*48。我从 imageivew 的左边缘开始,因此第一层的 l 值是 l = 0 和 r = 52,因为我提供 4 个单位填充和图像宽度是 48 个单位(48+4 = 52),然后对于第二个图像我使用 l = 52 (从第一层结束的地方开始),再次 r = 52 。如果存在尺寸为 48*48 的第三张图像,则第三层的 l 和 r 值将是 l = 104 r = 52 等等

活动类

@Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_layer_list_main);
        LayerDrawable drw = createHorizontallyStackedImages();
        ImageView iv1 = (ImageView)findViewById(R.id.imageView1);
        iv1.setImageDrawable(drw);

    

     private LayerDrawable createHorizontallyStackedImages()  
         BitmapDrawable d1 = (BitmapDrawable) getResources().getDrawable(R.drawable.abcgo_48_48_2x);  
         d1.setGravity(Gravity.LEFT);  
         BitmapDrawable d2 = (BitmapDrawable) getResources().getDrawable(R.drawable.amazon_48x48_2x);  
         d2.setGravity(Gravity.LEFT);  
         //BitmapDrawable d3 = (BitmapDrawable) getResources().getDrawable(R.drawable.hulu_48x48_2x);  
         //d3.setGravity(Gravity.LEFT);  

         Drawable drawableArray[]= new Drawable[]d1,d2;  
         LayerDrawable layerDraw = new LayerDrawable(drawableArray);  
         layerDraw.setLayerInset(0, 0, 0, 52, 0);
         layerDraw.setLayerInset(1,52,0,52,0);

         return layerDraw;  
       

活动-xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".LayerListMainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_
        android:layout_
        android:text="@string/hello_world" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_
        android:layout_
        android:layout_below="@+id/textView1"
        android:layout_marginTop="105dp"
        android:layout_toRightOf="@+id/textView1"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>

结果如下所示

通过这种方法,我们可以将多张图片合并到一个 LayerDrawable 中,并在单个 imageview 中显示合并后的图片

【讨论】:

我们可以将上述方法扩展到二维图像数组吗?两种可能性的任何建议/文件。

以上是关于使用 LayerDrawable 相互堆叠的图像数组。(在单个图像视图中显示多个图像)的主要内容,如果未能解决你的问题,请参考以下文章

将 ColorFilter 应用于 LayerDrawable 内的 Drawable

XAML ListView - 相互堆叠项目

如何使可拖动的 div 元素不相互堆叠

堆叠的 div 相互调整大小

无法在颤动中相互堆叠 5 个圆圈

Skeleton Boilerplate:列相互堆叠,但我希望它们并排?