Android,为什么添加左/右边距可以放大图像?

时间:2014-03-24 09:24:23

标签: android image gesture-recognition

我有两个图像视图,一个在另一个之上。在imageView后面显示用户的图像,而顶部的图像是封面图像(只是面部区域完全透明,如下面的屏幕截图所示)。

enter image description here

我的布局是这样的:

<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()工作正常。但是,当我向左或向右移动时,图像会向上扩展。

你怎么想?我的错误在哪里?任何建议将不胜感激。感谢

2 个答案:

答案 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