如何从具有不同行为的彼此对齐的部分制作视图 android

How to make a view from pieces aligned to each other with different behavior android

假设我有一张动物脸的碎片。我有一个外观,右耳,左耳,鼻子,鼠标,眼睛。 这部分的每一个部分都是独立的组件,因此即使将所有部分合二为一,鼻子的动画也不同于耳朵,不会同时发生。 所以我的问题是如何将项目收集在一起,以便将来它成为一个单元,但行为分开?我也不知道如何放置它,那只耳朵是沿着脸动画的,不是重叠的,它们之间也没有洞。 有任何想法吗?谢谢

编辑 这是我的图像示例(原始无法共享)。

所以在这张图片上,例如鼻子、眼睛、头发、眉毛是分开的元素。例如,如果我按下头发,它会启动一种类型的动画,如果我拖动鼻子(向右或向左),它会动画并改变视频播放器中的音量。

我现在最好的想法是将每个组件作为单独的视图,然后在布局中尝试以某种方式将它们聚集在一起,但我不确定它是否正确和好主意。

正如您所写的那样,为具有特定侦听器的每个元素制作分离视图。扩展 View should be sufficient solution - it gives you needed interfaces (e.g. OnDragListener or OnClickListener) 并让您保持清晰的解决方案。

在我看来,这是一个非常愉快的任务,你可以一步一步地解决,一个任务一个任务,一个组件一个组件...

至于容器所有动物部位,这取决于要求。如果在所有情况下眼睛、耳朵、毛发等都在相同或成比例的位置对于每只动物并且你把动物放了不止一次,值得考虑自定义 ViewGroup - 可能 RelativeLayout

很难给你更精确的提示,因为像我提到的那样会有很多次要和主要的要求。例如,如果两种不同动物的眼睛图像大小不相等,我会将我的组件(而不是 View)扩展 ImageView,这为我们提供了缩放功能。


编辑:我不确定是否可以通过这种方式完成,但我会尝试这样做:

<RelativeLayout ...>

    <!-- LAYER 1: Face - background -->
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:weightSum="100"
            android:gravity="center">
        <custom.path.FaceBaseComponent
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="60"
                android:src="@drawable/face_drawable"/>
    </LinearLayout>

    <!-- LAYER 1: Ears -->
    <LinearLayout
            android:layout_width="match_parent" 
            android:layout_height="match_parent"
            android:gravity="center">

        <!-- Left ear -->
        <custom.path.EarComponent
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="30"
                android:src="@drawable/left_ear"/>

        <!-- Filler -->
        <View 
                android:layout_width="0dp" 
                android:layout_height="match_parent" 
                android:layout_weight="40"/>

        <!-- Right ear -->
        <custom.path.EarComponent
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="30"
                android:src="@drawable/right_ear"/>

    </LinearLayout>

</RelativeLayout>

这可以帮助您保存每个元素之间的比例。继续尝试尽可能多地合并 "layers"(也许您可以将耳朵和眼睛放在单个 LinearLayout 中?)。