【问题标题】:Start and end the horizontal scrollview from center of the screen从屏幕中心开始和结束水平滚动视图
【发布时间】:2018-08-17 12:58:15
【问题描述】:

我需要在水平滚动视图中开始和结束内容,就像我们在画廊(已弃用)小部件中所做的那样。 Horizo​​ntal scrollview 内的内容应该从屏幕中心开始,滚动时应该从中心向左移动,与 Gallery 相同。

我有几百张图片,动态填充在水平滚动视图内的线性布局中。我实现了以一秒的时间延迟自动滚动水平滚动视图。但我需要从中心开始内容并以中心结束。

public class ImageGalleryScrollActivity
        extends AppCompatActivity {
    HorizontalScrollView horizontalScrollView;
    int maxCount=59;
    Handler mHandler = new Handler(new Handler.Callback() {

        @Override
        public boolean handleMessage(Message msg) {
            horizontalScrollView.smoothScrollBy(maxCount, 0);     

            mHandler.sendMessageDelayed(new Message(), 1000);
            return false;
        }
    });
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.horizontal_scroll_activity);
        horizontalScrollView=(HorizontalScrollView)findViewById(R.id.horizontalView);
        mHandler.sendMessageDelayed(new Message(), 1000);     
    }   
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent">

    <HorizontalScrollView
        android:id="@+id/horizontalView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center_horizontal"
        android:fillViewport="true">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

        </LinearLayout>
    </HorizontalScrollView>
</RelativeLayout>

【问题讨论】:

    标签: android horizontalscrollview


    【解决方案1】:

    您可以将每个等于屏幕宽度一半的左/右填充与滚动视图上的android:clipToPadding="false" 属性结合起来。

    由于在运行时之前您不会知道需要多少填充,因此您必须在 Java 中设置填充。把它放在你的onCreate()

    scrollView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            int padding = getResources().getDisplayMetrics().widthPixels / 2;
            scrollView.setPadding(padding, 0, padding, 0);
            scrollView.setClipToPadding(false);
        }
    });
    

    【讨论】:

    • 有没有办法在到达最后一个元素时再次启动自动滚动?
    猜你喜欢
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多