我想要实现的是下面的截图:
它具有以下内容:
在最终产品中,用户可以移动图片以从中选择某个区域。框架和半透明层将保持固定。
我正在寻找一个简单的解决方案来创建它。我尝试使用多个LinearLayouts
和ImageViews
创建布局,但我似乎无法正确使用。
我觉得有一个简单的解决方案,我只是不考虑。也许这甚至可以在一个自定义的drawable中完成。
答案 0 :(得分:1)
整个透明层可以使用一个自定义drawable实现。您只需要一个ImageView
和FrameLayout
的布局,它将成为透明层:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- This ImageView holds the picture you want to crop -->
<ImageView
android:layout_width="250dp"
android:layout_height="250dp"
android:src="@drawable/ic_launcher"
android:layout_centerInParent="true"/>
<!-- This is your transparent layer -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/crop_border"/>
</RelativeLayout>
您分配给FrameLayout
的自定义绘图需要看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- This is the transparent border -->
<item>
<shape
android:innerRadius="0dp"
android:shape="rectangle"
android:thicknessRatio="1.9"
android:useLevel="false" >
<solid android:color="@android:color/transparent" />
<stroke
android:width="100dp"
android:color="#AA0A0A0A" />
</shape>
</item>
<!-- This is the black frame of the picture -->
<item android:top="100dp" android:left="100dp" android:right="100dp" android:bottom="100dp">
<shape
android:innerRadius="0dp"
android:shape="rectangle"
android:thicknessRatio="1.9"
android:useLevel="false" >
<solid android:color="@android:color/transparent" />
<stroke
android:width="10dp"
android:color="#FF0A0A0A" />
</shape>
</item>
</layer-list>
结果将如下所示:
如果您想要旋转整个内容,则只需在xml中的android:rotation="25"
上设置RelativeLayout
。