Как сделать естественную прокрутку, которую люди догадываются в Horizontal ScrollView? - PullRequest
0 голосов
/ 05 октября 2018

У меня есть проблемы с UX моего приложения.enter image description here

Я хочу, чтобы изображения прокручивались как угадывание пользователей.

Хорошо прокручивается по горизонтали, если я прокручиваю абсолютно до прямой линии, но если я не будут, это прокрутка по вертикали.Это не то, что я хочу.

Если я нажимаю на область изображения и прокручиваю горизонтальное направление, изображения должны быть прокручены горизонтально, однако большинство пользователей не всегда прокручивают абсолютно прямую линию.

Ниже мой xml-код.

<android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/swipe_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_below="@id/layoutTop"
            android:visibility="@{isFirstAccess ? View.GONE : View.VISIBLE , default = gone}">


            <ScrollView
                android:id="@+id/scrollView"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:descendantFocusability="beforeDescendants"
                    android:focusable="true"
                    android:focusableInTouchMode="true"
                    android:orientation="vertical">

                    <!-- Area of Images -->
                    <RelativeLayout
                        android:id="@+id/layoutViewPager"
                        android:layout_width="match_parent"
                        android:layout_height="1dp"
                        android:background="@color/gray">

                        <android.support.v4.view.ViewPager
                            android:id="@+id/viewpager"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent">
                            <!-- This is area to added images. -->
                        </android.support.v4.view.ViewPager>

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="32dp"
                            android:layout_alignParentBottom="true"
                            android:layout_alignParentRight="true"
                            android:layout_margin="15dp"
                            android:background="@drawable/img_imge_count_background"
                            android:gravity="center"
                            android:minWidth="55dp"
                            android:paddingLeft="10dp"
                            android:paddingRight="10dp"
                            android:text='@{pageCount + "/" + imageListCount, default="0/0" }'
                            android:textColor="@color/lowGray"
                            android:visibility="@{pageCount == null ? View.GONE : View.VISIBLE}" />

                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_alignParentBottom="true"
                            android:layout_marginBottom="10dp"
                            android:layout_marginLeft="10dp"
                            android:alpha="0.25"
                            android:gravity="left"
                            android:paddingLeft="5dp"
                            android:text='@{currentPageImageFrom, default=""}'
                            android:textColor="@color/white"
                            android:textSize="11sp" />

                    </RelativeLayout>
                   .
                   .
                   .
                   .


class CustomPagerAdapter extends PagerAdapter {

    Context mContext;
    LayoutInflater mLayoutInflater;
    RequestOptions requestOptions;
    ArrayList<ImageView> imageViews = new ArrayList<>();

    public void onDestroy() {
        this.mContext = null;
        this.requestOptions = null;
        for (ImageView view : imageViews) {
            view.setBackground(null);
            view = null;
        }

        if (nMapContext != null)
            nMapContext.onDestroy();
    }

    public CustomPagerAdapter(Context context) {
        mContext = context;
        mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.requestOptions = new RequestOptions();


    }


    @Override
    public int getCount() {
        if (homeDetailViewModel.mImageList != null && homeDetailViewModel.mImageList.getValue() != null)
            return homeDetailViewModel.mImageList.getValue().size();
        else return 0;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == ((LinearLayout) object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Log.d("kk9991", "viewpager instantiateItem:" + position);
        View itemView = mLayoutInflater.inflate(R.layout.viewpager_childview_intro, container, false);
        ImageView imageView = itemView.findViewById(R.id.imageView);
        imageView.setOnClickListener(view -> {
            goImageViewer(view);
        });
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);

        if (viewpagerImageSize == null)
            viewpagerImageSize = Utils.getResizeImageSpecForHomeDetail(homeDetailViewModel.mImageList.getValue().get(position).width, homeDetailViewModel.mImageList.getValue().get(position).height, 15.0f);

        this.requestOptions.override(viewpagerImageSize.width, viewpagerImageSize.height);

        Glide.with(mContext)
                .asBitmap()
                .load(homeDetailViewModel.mImageList.getValue().get(position).src)
                .apply(this.requestOptions)
                .into(new SimpleTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                        imageView.setImageBitmap(Utils.getCenterCropImage(resource));
                    }
                });
        container.addView(itemView);
        imageViews.add(imageView);

        return itemView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((LinearLayout) object);
    }


}

Нужна помощь.Спасибо тебе:)

1 Ответ

0 голосов
/ 05 октября 2018

Если вы попытаетесь отобразить представление прокрутки как горизонтальное, то используйте код, приведенный ниже ..

    <ScrollView
    android:id="@+id/scrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
</ScrollView>

Представление прокрутки списка как горизонтальное, а затем используйте код ниже.

    <HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/mylist"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1" >
    </ListView>
</HorizontalScrollView>

Если вы использовали Recyclerview, топроход только ниже линии ..

        mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));
...