2011-10-24 69 views
1

我有一個由單個GridView組成的GridView活動,可以從sdcard位置顯示多達100個圖像縮略圖。我正在創建另一個活動,在網格中的任何一個縮略圖被觸摸時調用。該其他活動應該全屏顯示所選圖像(可以通過將圖像uri傳遞給新活動來完成此操作)。但是,我希望能夠從所選圖像的全屏視圖中左右滑動以進入下一個圖像,而不是返回到gridview活動並選擇另一個圖像進行全屏顯示。從GridView調用的全屏圖像瀏覽器

如何實現這種圖像瀏覽器活動,從sdcard位置使用滑動手勢全屏瀏覽圖像?

回答

2

你可以使用一個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; 
} 

} 
2
  1. 抓鬥通過SDK管理器的兼容包的最新版本(或去here
  2. 安裝JAR作爲一個lib項目中的
  3. 利用ViewPager,這是一個ViewGroup,其功能類似於AdapterView,並且可以爲您執行所有輕掃手勢管理工作

此外,來自Android開發人員博客的here is an example可能會幫助您入門。

HTH