我有一个ListView,其中每个项目都可以侧向滑动,以便另一个视图将滑入并取代它。我已经将每个列表行实现为水平RelativeLayout中的两个视图。其中一个视图最初位于屏幕之外。
问题是我无法使屏幕外视图在滑入屏幕时被渲染,除非它最初部分在屏幕上(如图所示),甚至这种技术似乎仅当不可见视图在右侧时才起作用。
有没有更好的方法来实现这一目标?我试图在幻灯片中调用.invalidate()和.setVisibility(VISIBLE),但没有效果。
更新
渲染的问题似乎是最初隐藏的视图始终具有宽度0 ,即使我尝试在滑动期间以编程方式更改它。我在两个视图周围使用RelativeLayout来使可见视图完全适合屏幕。
这是一项要求,可以通过手指拖动视图。我目前在View.OnTouchListener中监听MotionEvents来实现它。
答案 0 :(得分:1)
您的问题非常含糊,因为您没有提供任何代码或方法来滑入/滑出视图。如果你还没有使用View Switcher或ViewFlipper,这还不够吗?
您还可以使用http://developer.android.com/reference/android/widget/ViewSwitcher.htm获得滑动效果,这只允许2个视图,并且可以通过动画滑动一个视图而另一个视图 - 这可能更接近您的需求,但有一些小缺点。 View滑块的工作方式类似于查看翻转器(这使您可以拥有多个视图),下面是viewflipper的一些示例代码。
http://developer.android.com/reference/android/widget/ViewFlipper.html
<ViewFlipper
android:id="@+id/flipper"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
YOUR VIEWS
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
YOUR VIEWS
</LinearLayout>
</ViewFlipper>
然后你可以附加你自己的动画,并在滑动或其他动作上调用showNext来在两个视图之间设置动画(在你的情况下,幻灯片插入和幻灯片动画)
/* Flipper animations */
yourFlipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.slide_in));
yourFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_out));
youFlipper.showNext();
只需将视图鳍状肢放入列表视图的自定义单元格中即可。这可以处理隐藏和显示意味着你不必乱用可见等等,虽然我感谢你可能得不到完全相同的预期效果。