2

線形レイアウトに 2 つのグリッドビューがあります。ここに私のXMLコードがあります:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:gravity="center"
    android:orientation="horizontal" >

   <GridView
    android:id="@+id/leftGrid2"
    android:layout_width="416dp"
    android:layout_height="1078dp"
    android:columnWidth="70dp"
    android:horizontalSpacing="5dp"
    android:numColumns="2"
    android:paddingRight="20dp"
    android:stretchMode="columnWidth"
    android:verticalSpacing="5dp" >

  </GridView>

   <GridView
    android:id="@+id/rightGrid2"
    android:layout_width="400dp"
    android:layout_height="match_parent"
    android:columnWidth="70dp"
    android:horizontalSpacing="5dp"
    android:numColumns="2"
    android:stretchMode="columnWidth"
    android:verticalSpacing="5dp" >

    </GridView>
  </LinearLayout>

これら 2 つのグリッド ビューを一緒にスクロールまたは同期させるにはどうすればよいですか? アプリケーションを実行すると、2 つの別々のスクロールがあります。

ありがとう、

4

2 に答える 2

2

GridView には、その AbsLisView 親を介してSmoothScrollToPosition(int)メソッドが提供されます。これにより、目的の位置までスクロールします。ここで、 OnScrollListener を使用してScrollEventをリッスンします。これらを結び付けるだけです:

GridView other;
@Override public void onScroll(AbsListView view, int firstItem, int visItems, int total) {
    other.smoothScrollToPosition(firstItem);
}

今、これはしません!2 つのビューが比較できない場合、つまり期待どおりに動作します。同じ内容量。

于 2012-07-18T23:07:21.017 に答える
0

以前、ギャラリーでこれを行う必要がありました。GridViewこれを取得して、非常に簡単に適用できるはずです。

public class DualGallery extends Gallery {

/**
 * Second {@link Gallery}
 */
public DualGallery b;

/**
 * Current {@link Context}
 */
Context mContext;

/**
 * Constructor that takes the {@link Context} and second {@link DualGallery}
 * 
 * @param context
 * @param b
 */
public DualGallery(Context context, DualGallery b) {
    super(context);

    this.mContext = context;

    this.b = b;

}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    // Scrolls this and the second Gallery avoiding an endless loop
    return super.onFling(e1, e2, velocityX, velocityY)
            && b.onFling2(e1, e2, velocityX, velocityY);
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    // Scrolls this and the second Gallery avoiding an endless loop
    return super.onScroll(e1, e2, distanceX, distanceY)
            && b.onScroll2(e1, e2, distanceX, distanceY);
}

@Override
public void setOnClickListener(OnClickListener l) {
    super.setOnClickListener(l);
}

@Override
public void setAdapter(SpinnerAdapter adapter) {
    super.setAdapter(adapter);
}

/**
 * Special function to redirect to just
 * {@link Gallery#onFling(MotionEvent, MotionEvent, float, float)}
 * 
 * @param e1
 * @param e2
 * @param velocityX
 * @param velocityY
 * @return
 */
public boolean onFling2(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    return super.onFling(e1, e2, velocityX, velocityY);
}

/**
 * Special function to redirect to just
 * {@link Gallery#onScroll(MotionEvent, MotionEvent, float, float)}
 * 
 * @param e1
 * @param e2
 * @param distanceX
 * @param distanceY
 * @return
 */
public boolean onScroll2(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    return super.onScroll(e1, e2, distanceX, distanceY);
}

}

于 2012-07-18T23:21:38.413 に答える