我有一個由單個GridView組成的GridView活動,可以從sdcard位置顯示多達100個圖像縮略圖。我正在創建另一個活動,在網格中的任何一個縮略圖被觸摸時調用。該其他活動應該全屏顯示所選圖像(可以通過將圖像uri傳遞給新活動來完成此操作)。但是,我希望能夠從所選圖像的全屏視圖中左右滑動以進入下一個圖像,而不是返回到gridview活動並選擇另一個圖像進行全屏顯示。從GridView調用的全屏圖像瀏覽器
如何實現這種圖像瀏覽器活動,從sdcard位置使用滑動手勢全屏瀏覽圖像?
我有一個由單個GridView組成的GridView活動,可以從sdcard位置顯示多達100個圖像縮略圖。我正在創建另一個活動,在網格中的任何一個縮略圖被觸摸時調用。該其他活動應該全屏顯示所選圖像(可以通過將圖像uri傳遞給新活動來完成此操作)。但是,我希望能夠從所選圖像的全屏視圖中左右滑動以進入下一個圖像,而不是返回到gridview活動並選擇另一個圖像進行全屏顯示。從GridView調用的全屏圖像瀏覽器
如何實現這種圖像瀏覽器活動,從sdcard位置使用滑動手勢全屏瀏覽圖像?
你可以使用一個ViewFlipper
public class ImageViewTest extends Activity {
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private GestureDetector gestureDetector;
View.OnTouchListener gestureListener;
private Animation slideLeftIn;
private Animation slideLeftOut;
private Animation slideRightIn;
private Animation slideRightOut;
private ViewFlipper viewFlipper;
String message = "Initial Message";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Set up viewflipper
viewFlipper = new ViewFlipper(this);
ImageView i = new ImageView(this);
i.setImageResource(R.drawable.sample_1);
ImageView i2 = new ImageView(this);
i2.setImageResource(R.drawable.sample_2);
viewFlipper.addView(i);
viewFlipper.addView(i2);
//set up animations
slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out);
slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);
//put up a brownie as a starter
setContentView(viewFlipper);
gestureDetector = new GestureDetector(new MyGestureDetector());
}
public class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.v(LOGID,"right to left swipe detected");
viewFlipper.setInAnimation(slideLeftIn);
viewFlipper.setOutAnimation(slideLeftOut);
viewFlipper.showNext();
setContentView(viewFlipper);
} // left to right swipe
else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.v(LOGID,"left to right swipe detected");
viewFlipper.setInAnimation(slideRightIn);
viewFlipper.setOutAnimation(slideRightOut);
viewFlipper.showPrevious();
setContentView(viewFlipper);
}
} catch (Exception e) {
// nothing
}
return false;
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event))
return true;
else
return false;
}
}
ViewPager
,這是一個ViewGroup,其功能類似於AdapterView,並且可以爲您執行所有輕掃手勢管理工作此外,來自Android開發人員博客的here is an example可能會幫助您入門。
HTH