如何在我的滚动视图中调整我的imageview的大小,因为它在这个图像中完成?

我创build了一个滚动视图,并在其中放置一个imageview。 我想滚动它来调整它在下面的图像中做的相同的方式,但到目前为止我没有成功。

在我的尝试中,图像在滚动上被resize,但是在resize之后剩余空间。 你将如何修改如下:

图片:

在这里输入图像说明

我的代码到目前为止:

activity_main.xml中

<ImageView android:layout_gravity="center" android:adjustViewBounds="true" android:layout_width="601dp" android:layout_height="250dp" android:paddingTop="0dp" android:paddingLeft="0dp" android:paddingRight="0dp" android:scaleType="fitXY" android:id="@+id/contactPic" android:src="@drawable/stock" android:clickable="true"/> 

主要活动:

 @Override public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) { final ImageView contactPicture = (ImageView) findViewById(R.id.contactPic); final RelativeLayout contactLayout = (RelativeLayout) findViewById(R.id.ContactRLayout); if (scrollView == contactScrollView) { View view = (View) scrollView.getChildAt(scrollView.getChildCount() - 1); int distanceFromPageEnd = (view.getBottom() - (scrollView.getHeight() + scrollView.getScrollY())); Log.e("onScrollChanged", "distance from bottom = " + String.valueOf(distanceFromPageEnd)); if (distanceFromPageEnd >= 1408) { contactPicture.getLayoutParams().height = (distanceFromPageEnd - 1408); contactPicture.requestLayout(); } } 

ScrollViewListener:

  public interface ScrollViewListener { void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy); } 

ObservableScrollView:

 public class ObservableScrollView extends ScrollView { private ScrollViewListener scrollViewListener = null; public ObservableScrollView(Context context) { super(context); } public ObservableScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public ObservableScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public void setScrollViewListener(ScrollViewListener scrollViewListener) { this.scrollViewListener = scrollViewListener; } public void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) { super.onOverScrolled(scrollX, scrollY, clampedX, clampedY); } @Override protected void onScrollChanged(int x, int y, int oldx, int oldy) { super.onScrollChanged(x, y, oldx, oldy); if(scrollViewListener != null) { scrollViewListener.onScrollChanged(this, x, y, oldx, oldy); } } } 

下面有一个简单的例子来说明如何实现视差效果。

首先,把你的ImageView和其他视图放到FrameLayout

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/scrollView" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/flWrapper" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/contactPic" android:layout_width="match_parent" android:layout_height="@dimen/contact_photo_height" android:scaleType="centerCrop" android:src="@drawable/stock" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/contact_photo_height"> <!-- Other Views --> </LinearLayout> </FrameLayout> </ScrollView> 

LinearLayout的上边距等于ImageViews的高度(在本例中为@dimen/contact_photo_height )。

然后,我们应该听滚动ScrollView滚动位置,并改变ImageView的位置:

 @Override protected void onCreate(Bundle savedInstanceState) { <...> mScrollView = (ScrollView) findViewById(R.id.scrollView); mPhotoIV = (ImageView) findViewById(R.id.contactPic); mWrapperFL = (FrameLayout) findViewById(R.id.flWrapper); mScrollView.getViewTreeObserver().addOnScrollChangedListener(new ScrollPositionObserver()); <...> } private class ScrollPositionObserver implements ViewTreeObserver.OnScrollChangedListener { private int mImageViewHeight; public ScrollPositionObserver() { mImageViewHeight = getResources().getDimensionPixelSize(R.dimen.contact_photo_height); } @Override public void onScrollChanged() { int scrollY = Math.min(Math.max(mScrollView.getScrollY(), 0), mImageViewHeight); // changing position of ImageView mPhotoIV.setTranslationY(scrollY / 2); // alpha you could set to ActionBar background float alpha = scrollY / (float) mImageViewHeight; } }