如何使用不同类型的重力制作 LayerImageDrawable

Posted

技术标签:

【中文标题】如何使用不同类型的重力制作 LayerImageDrawable【英文标题】:How to make a LayerImageDrawable with different types of gravity 【发布时间】:2015-01-16 18:54:01 【问题描述】:

我正在尝试构建一个包含两个图像的图像视图;背景中的一张照片,上面有一个小指示器。但是,我一直试图让指示器出现在图像的右下角,而背景中的照片应该居中并缩放以适合主图像。

使用各种元素的重力属性似乎并没有真正完成任何事情。

下面是我尝试用来设置可绘制对象内的重力的代码,以及包含具有自己的重力集的 LayerDrawable 的 XML 元素,但似乎都没有做任何事情。

    Resources r = fragment.getActivity().getResources();
    Drawable[] layers = new Drawable[2];
    layers[0] = r.getDrawable(R.drawable.addcoverphoto);        
    layers[1] = r.getDrawable(R.drawable.project_active); // this is usually user-content instead 
    ((BitmapDrawable)layers[1]).setGravity(Gravity.RIGHT);
    LayerDrawable layerDrawable = new LayerDrawable(layers);
    image.setImageDrawable(layerDrawable);      

   <ImageView
    android:layout_
    android:layout_        
    android:id="@+id/todayPhotoView"
    android:scaleType="center"
    android:layout_gravity="bottom"/>

【问题讨论】:

【参考方案1】:

您可以将叠加的图像(右下角的那个)设为九个补丁图像,其中图像位于九个补丁的右下角。这将需要使最左边的两个像素和最上面的两个像素成为可缩放部分。这样,drawable 将在左侧和顶部拉伸以匹配,将您的图像留在右下角。

如果您在解决方案中需要更大的灵活性,您可以使用围绕两个 ImageView 的框架布局。使用第一个图像视图显示您的照片,并将第二个图像视图的布局重力设置为底部|右下角,并使用 wrap_content 设置布局宽度和高度。

【讨论】:

如此优雅的解决方案!谢谢。

以上是关于如何使用不同类型的重力制作 LayerImageDrawable的主要内容,如果未能解决你的问题,请参考以下文章

如何根据重力加速度编码一个运动圈?

使用 UIGravityBehavior 的子视图有不同的重力

打一局王者荣耀掉星的时间,我制作了一款支持 重力感应 的 3D动态壁纸

Unity中游戏对象的水平重力

打一局王者荣耀掉星的时间,我制作了一款支持 重力感应 的 3D动态壁纸

水平线性布局中两个文本视图的不同重力