我試圖以編程方式實現圖庫的滾動動畫。如何以編程方式滾動動畫
試着setSelection(int pos, Boolean animate)
,它不工作。
有無論如何覆蓋setSelection()
方法。
我試圖以編程方式實現圖庫的滾動動畫。如何以編程方式滾動動畫
試着setSelection(int pos, Boolean animate)
,它不工作。
有無論如何覆蓋setSelection()
方法。
Gallery.setSelection(int position,boolean animate);
溶液: 如果你還在尋找,我對你有兩種可能的解決方案,既 略有不快:
(1)您可以在畫廊做一個具有選定速度的投擲,因此:
myGallery.onFling(null,null,velocity,0);
通過調整速度,您可以設置值以將選擇 在任一方向上移動一個或兩個。由於圖庫自我中心,您不需要完全正確地獲取目的地。
(2)由於Gallery源代碼可用,您可以修改它以便 實現您自己的Gallery。它看起來好像你需要添加很多代碼才能控制投擲,以便在選擇的 選項結束。我認爲我必須要做(2),但發現我可以用(1)爲我的問題脫身 。
我正在通過圖庫源查看是否可以獲得此功能。它看起來像這個代碼可能有些東西。然而,我放棄之前,我可以得到它的工作。好像我沒有傳入正確的座標,所以res總是返回false。如果它能夠工作,將會返回true。
只是在這裏發佈這個案件,以防別人想要去修復它! (如果你管理它,請發表您的解決方案!)
Rect rect = new Rect();
gallery.getHitRect(rect);
int x = rect.centerX()+getWindowManager().getDefaultDisplay().getWidth();
int y = rect.centerY();
MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0);
timesGallery.onDown(event);
boolean res = timesGallery.onSingleTapUp(null);
我提出的「Kurru」給出代碼變化不大。這正在工作
Rect rect = new Rect();
gallery.getHitRect(rect);
int width = Math.abs(rect.width());
if(!isForwardScroll){
width = width * -1;
}
int x = rect.centerX()+width/2;
int y = rect.centerY();
MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0);
gallery.onDown(event);
boolean res = gallery.onSingleTapUp(null);
你能提供更多的代碼或例子?謝謝 – pengwang 2011-05-15 04:35:14
基於庫魯的模擬點擊下一個或上一個視圖的出色想法。
//scroll forward or backward
private void scroll(int type){
View selectedV = mG.getSelectedView();
int idx = mG.indexOfChild(selectedV);
switch(type){
case FORWARD:
default:
if(idx<mG.getChildCount()-1)
idx++;
break;
case BACKWARD:
if(idx>0)
idx--;
break;
}
//now scrolled view's child idx in gallery is gotten
View nextView = mG.getChildAt(idx);
//(x,y) in scrolled view is gotten
int x = nextView.getLeft()+nextView.getWidth()/2;
int y = nextView.getTop()+nextView.getHeight()/2;
String out = String.format("x=%d, y=%d", x, y);
Log.i(TAG+".scroll", out);
//Kurru's simulating clicking view
MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0);
mG.onDown(event);
boolean res = mG.onSingleTapUp(null);
Log.i(TAG+".scroll", "onSingleTapUp return =" + res);
}
剛纔我有這個問題。我需要畫廊的一個元素移動,所以對我來說最好的解決辦法是效仿鍵按下事件
myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
或
myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null);
方法(1)的偉大工程,只是確保你使用足夠大的速度。讓我們感到羞恥的是,這裏的Android文檔是如此的具有誤導性:「當它發生時通知其發生的事件」是不正確的,恕我直言,應該這樣說:「告訴圖庫執行一次投擲」或者該方法應該被稱爲performFling – pheelicks 2011-05-03 18:06:27