メインアクティビティに4つの画面/レイアウトがあり、スワイプすると機能します。実装しました
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels){}
そしてtは動作します(立方体のようにアニメーション化)。
レイアウト間の 1 つの切り替えで、10 回 ( I Log.i) onPageScrolled 関数を呼び出し、すべての値を記録します。メニューボタンのクリック時にアニメーションを実装しようとしています。
のようにしてみました
public void automaticAnimate(final int next, final int current, final int direction) {
Thread thread = new Thread() {
public void run() {
int steps = Math.abs(current - next);
if (steps > 0) {
if (direction == TO_LEFT) {
float leftPositionOffset[] = new float[] { 0.98796296f,
0.886111114f, 0.49444443f, 0.44537038f,
0.37314814f, 0.21018519f, 0.11388889f,
0.05925926f, 0.026851851f, 0.010185185f,
0.0037037036f, 0.000001f, 0.0f };
int leftPositionOffsetPixels[] = new int[] { 1067, 957,
534, 481, 403, 227, 123, 64, 29, 11, 4, 1, 0 };
for (int i = 0; i < leftPositionOffset.length; i++) {
int panel = (i == 0) ? current : current - 1;
onPageScrolled(panel, leftPositionOffset[i],
leftPositionOffsetPixels[i]);
try {
Thread.sleep(30);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} else {
float rightPositionOffset[] = new float[] {
0.004629612f, 0.020370483f, 0.07407403f,
0.17314816f, 0.27592587f, 0.44537044f,
0.54444456f, 0.69722223f, 0.70370364f,
0.7907407f, 0.86018515f, 0.91203713f,
0.94537044f, 0.9694445f, 0.98333335f,
0.9916666f, 0.9972222f, 0.99999f, 0.0f };
int rightPositionOffsetPixels[] = new int[] { 4, 22,
79, 187, 297, 481, 588, 748, 753, 759, 854,
928, 985, 1021, 1047, 1062, 1070, 1077, 1078, 0 };
for (int i = 0; i < rightPositionOffset.length; i++) {
int panel = (i == (rightPositionOffset.length - 1)) ? current + 1
: current;
onPageScrolled(panel, rightPositionOffset[i],
rightPositionOffsetPixels[i]);
try {
Thread.sleep(30);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
};
thread.start();
}
onPageScrolled
から呼び出すことができないため、エラーが発生しnot UI thread
ます。UIスレッド以外から呼び出す方法onPageScrolled
(その瞬間にレイアウトを適切な位置に配置する)は?