我有两个图像视图,一个在另一个之上。在imageView后面显示用户的图像,而顶部的图像是封面图像(只是面部区域完全透明,如下面的屏幕截图所示)。
我的布局是这样的:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rlContainer">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/ivUserImage"
android:contentDescription="@string/content_description"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/ivCoverImage"
android:contentDescription="@string/content_description"
android:scaleType="fitXY"/>
</RelativeLayout>
我使用OnSwipeTouchListener class来调整用户在透明(脸部)区域的形状。我在片段的onCreateView()中有以下代码:
mrlContainer = (RelativeLayout) view.findViewById(R.id.rlContainer);
mUserImage = (ImageView) view.findViewById(R.id.ivUserImage);
mUserImage.setImageURI(mImgUri);
mCoverImage = (ImageView) view.findViewById(R.id.ivCoverImage);
mCoverImage.setOnTouchListener(new OnSwipeTouchListener(mContext) {
public void onSwipeTop() {
moveImageToTop();
}
public void onSwipeRight() {
moveImageToRight();
}
public void onSwipeLeft() {
moveImageToLeft();
}
public void onSwipeBottom() {
moveImageToBottom();
}
public boolean onTouch(View v, MotionEvent event) {
return getGestureDetector().onTouchEvent(event);
}
});
我的运动方法是这些:
private void moveImageToTop() {
LayoutParams layoutParams = (LayoutParams) mUserImage.getLayoutParams();
layoutParams.topMargin -= 20;
mUserImage.setLayoutParams(layoutParams);
}
private void moveImageToBottom() {
LayoutParams layoutParams = (LayoutParams) mUserImage.getLayoutParams();
layoutParams.bottomMargin -= 20;
mUserImage.setLayoutParams(layoutParams);
}
private void moveImageToRight() {
LayoutParams layoutParams = (LayoutParams) mUserImage.getLayoutParams();
layoutParams.rightMargin -= 20;
mUserImage.setLayoutParams(layoutParams);
}
private void moveImageToLeft() {
LayoutParams layoutParams = (LayoutParams) mUserImage.getLayoutParams();
layoutParams.leftMargin -= 20;
mUserImage.setLayoutParams(layoutParams);
}
现在,当我触摸屏幕并移动我的手指顶部或底部时,moveImageToTop()和moveImageToBottom()工作正常。但是,当我向左或向右移动时,图像会向上扩展。
你怎么想?我的错误在哪里?任何建议将不胜感激。感谢答案 0 :(得分:0)
据我所知,默认图像scaleType是FIT_CENTER。由于您在两个轴中都设置了MATCH_PARENT,因此您无法仅更改位置。您还可以更改视图边界。如果图像适合水平轴,则通过更改垂直边界,您无法在ImageView内更改图像大小。
如果我是你,我将在onLayout更改期间使用动画框架或更改位置,并在每次滑动后请求重新布局。
答案 1 :(得分:0)
我将后面图像的xml代码更改为以下代码并修复了左/右移动:
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/ivUserImage"
android:contentDescription="@string/content_description"
android:scaleType="center"/>
无论如何,我决定使用非常容易使用的PhotoView library by chrisbanes。