Android Как прокручивать HorizontalScrollView с прокруткой другого параллеля HorizontalScrollView

У меня есть HorizontalScrollView в верхнем представлении заголовка, и я программно добавляю несколько HorizontalScrollViews параллельно верхнему HorizontalScrollView. Когда я прокручиваю верхний ScrollView, все остальные должны прокручиваться с этим и наоборот. Как этого добиться? Вот изображение для лучшего понимания


person Kalu Khan Luhar    schedule 13.03.2015    source источник


Ответы (3)


Вы можете установить scrollViews в onTouchListener и позволить другим scrollViews прокручиваться вместе с ним. У меня тоже самое было давно. Вы можете сделать трюк, например:

 scrollOne = (HorizontalScrollView)findViewById(R.id.horizontal_one);
 scrollTwo = (HorizontalScrollView)findViewById(R.id.horizontal_two);

 scrollTwo.setOnTouchListener(new OnTouchListener(){

@Override
public boolean onTouch(View view, MotionEvent event) {
    // TODO Auto-generated method stub

    int scrollX = view.getScrollX();
    int scrollY = view.getScrollY();

    scrollOne.scrollTo(scrollX, scrollY);
                return false;
    }

});

Это было мое решение в этом вопросе: прослушивание событий прокрутки horizontalscrollview android

Для меня это работало нормально...

person Opiatefuchs    schedule 13.03.2015

<ScrollView 

    android:id="@+id/ScrollView02" 
            android:layout_width="match_parent" 
            android:layout_height="wrap_content"
            android:background="#ffffff"
            android:layout_below="@+id/one"
            android:layout_marginBottom="51dp"

            >


<TableLayout
    android:id="@+id/videotable"
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"
    android:background="#ffffff"

     android:layout_marginTop="5dp"
     android:cacheColorHint="#00000000"

  />

</ScrollView>

добавьте свой субгоризонтальный вид прокрутки в этот макет таблицы динамически, например

pubs = (TableLayout)findViewById(R.id.videotabls);
        pubs.setStretchAllColumns(true);
        pubs.bringToFront();

HorizontalScrollView hz=new HorizontalScrollView(video.this);   
        lp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        hz.setBackgroundColor(Color.parseColor("#e6e6e6"));
        hz.setLayoutParams(lp);  
        TableRow tr =  new TableRow(video.this);
tr.setBackgroundColor(Color.parseColor("#e6e6e6"));

        tr.setId(10);

//add all subitems in each layout if reqiuired here

hz.addView(rowlayout);//row layout is a sub layout
        pubs.addView(hz);
        pubs.addView(tr); 
person Karthika PB    schedule 13.03.2015

Я решил, получив событие изменения прокрутки. Также плавно прокручивается.

ArrayList<HorizontalScrollView> scrArrayList=new ArrayList<HorizontalScrollView>();

    for (int j = 0; j < wrapper.data.size(); j++) {
        LayoutInflater inflater1 = this.getLayoutInflater();
        View itemMain = inflater1.inflate(R.layout.item_scedule, null);
        HorizontalScrollView horizontalScrollView = (HorizontalScrollView) itemMain
                .findViewById(R.id.horizontalScrollView1);
        scrArrayList.add(horizontalScrollView);
    }

    mainScrollView.getViewTreeObserver().addOnScrollChangedListener(
            new OnScrollChangedListener() {
                @Override
                public void onScrollChanged() {
                        for (int i = 0; i < scrArrayList.size(); i++) {
                            int scrollX = scrollView.getScrollX();
                            int scrollY = scrollView.getScrollY();
                            scrArrayList.get(i).scrollTo(scrollX, scrollY);
                        }

                }
            });
person Kalu Khan Luhar    schedule 13.03.2015