我想创建一个与图库窗口小部件类似的窗口小部件,但是垂直滚动而不是水平滚动。那就是画廊中的图像应垂直放置在屏幕上,并且可以垂直滚动。有人帮我吗?
答案 0 :(得分:2)
假设您想拥有一列图像并想要垂直滚动。请查看以下示例
<GridView android:id="@+id/gridView1"
android:layout_width="70dp" android:layout_height="fill_parent"
android:verticalSpacing="2dp" android:numColumns="1"
android:stretchMode="columnWidth" android:layout_marginLeft="1dp"
android:layout_alignParentTop="true" android:scrollingCache="true"
android:scrollbars="vertical" android:fadeScrollbars="false"
android:scrollbarAlwaysDrawVerticalTrack="true">
</GridView>
答案 1 :(得分:1)
我设法使用ListView
创建一个简单的解决方案,并在滚动停止时将其滚动到最近的位置。只需创建ListView
并添加此OnScrollListener
:
编辑:我已将代码更新为更好的实现
lv.setOnScrollListener(new OnScrollListener(){
private boolean handleScrollChange = true;
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
public void onScrollStateChanged(final AbsListView view, int scrollState) {
if (!handleScrollChange)
return;
if(scrollState == OnScrollListener.SCROLL_STATE_IDLE){
View centerView;
if (view.getLastVisiblePosition() - view.getFirstVisiblePosition() > 1) { //if shows more than 2 items, display the middle one
centerView = view.getChildAt( Math.round((view.getChildCount())/2));
}
else { //shows 2 items, check which one is closer to the middle
View bottomview = view.getChildAt(view.getChildCount()-1);
if (bottomview.getTop() < bottomview.getHeight() / 2) {
centerView = bottomview;
}
else {
centerView = view.getChildAt(0);
}
}
int wantedOffset = (view.getHeight() - centerView.getHeight()) / 2 ;
final int scrollby = (int) centerView.getY() - wantedOffset;
//we want to prevent the smoothScroll from calling this function again
handleScrollChange = false;
view.post(new Runnable() {
@Override
public void run() {
view.smoothScrollBy(scrollby,300);
view.postDelayed(new Runnable() {
@Override
public void run() {
handleScrollChange = true;
}
}, 1000);
}
});
}
}
});
答案 2 :(得分:0)
您必须扩展Gallery类,并在Draw过程中将画布旋转90度。然后只需要修改onTouch事件和其他一些内容。在此之后,布局会出现一些问题(因为它仍然希望在其参数中绘制布局)。所以我把它放在一个LinearLayout中并修改了布局大小。
所以最终的垂直画廊实际上是一个线性布局,里面有一个画廊。我已经实现了它,它运行得很好。您只需要将放入其中的所有内容旋转90度到另一个方向。权衡实际上是一点点,因此您可以扩展您想要放入其中的每个视图,并在绘制过程中将其旋转到另一个方向。