2012-07-14 46 views
3

我有一個圖片的GridView,它們都在/ res目錄中(隨應用程序一起提供)。當我打開其中一個時,沒有問題。但是,我希望能夠以與在圖庫中完成的相同的方式在它們之間滾動,即在圖像上滑動手指將導致下一個圖像出現。有沒有辦法做到這一點? 謝謝!Android以畫廊風格的方式滾動瀏覽應用內圖片

+1

的可能重複[機器人viewPager執行(http://stackoverflow.com/questions/7244813/android-viewpager-implementation) – FoamyGuy 2012-07-14 14:59:05

回答

1

我結束了創建一個簡單的實現我自己的:

public class PicView extends View{ 

private int mBackgroundPicPosition; 
private Bitmap mBackgroundPic; 
private int m_touchStartPosX; 
private EventsActivity m_mainActivity; 
private int m_viewWidth; 
private int m_viewHeight; 
private int m_backgroundX; 
private Integer[] m_picIDs; 

public PicView(Context context, Integer[] picIDs) { 
    super(context); 
    m_mainActivity = (EventsActivity)context; 
    m_viewWidth = m_mainActivity.mMetrics.widthPixels; 
    m_viewHeight = m_mainActivity.mMetrics.heightPixels; 
    m_picIDs = picIDs; 
} 
public void setBackground(int position) { 
    Options opts = new Options(); 
    mBackgroundPicPosition = position; 
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), m_picIDs[position], opts); 
    mBackgroundPic = BitmapFactory.decodeResource(getResources(), m_picIDs[position], opts); 

    int picHeight = bitmap.getHeight(); 
    int picWidth = bitmap.getWidth(); 

    mBackgroundPic.recycle(); 
    float xScale, yScale, scale; 
    if (picWidth > picHeight) { 
     // rotate the picture 
     Matrix matrix = new Matrix(); 
     matrix.postRotate(-90); 
     bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); 
     picHeight = bitmap.getHeight(); 
     picWidth = bitmap.getWidth(); 
     matrix = null; 

    } 
    xScale = ((float)m_viewWidth)/ picWidth;  
    yScale = ((float)m_viewHeight)/picHeight; 
    scale = (xScale <= yScale) ? xScale : yScale; 
    m_backgroundX = (xScale >= yScale) ? (m_viewWidth - (int)(picWidth * scale))/2 : 0; 
    mBackgroundPic = Bitmap.createScaledBitmap(bitmap, (int)(picWidth * scale), (int)(picHeight * scale), true); 
    bitmap = null; 

    invalidate(); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    // draw the background 
    canvas.drawBitmap(mBackgroundPic, m_backgroundX, 0, null); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    int eventaction = event.getAction(); 
    int X = (int)event.getX(); 

    switch (eventaction) { 
     case MotionEvent.ACTION_DOWN: 
      m_touchStartPosX = X; 
     break; 
     case MotionEvent.ACTION_UP: 
      //check to see if sliding picture 
      if (X <= m_touchStartPosX) { 
       // slide to the left 
       setBackground(getNextPosition()); 
      } else { 
       // slide to the right 
       setBackground(getPrevPosition()); 
      } 
      m_touchStartPosX = -1; 
     break; 
    } 
    invalidate(); 
    return true; 

} 

private int getPrevPosition() { 
    if (mBackgroundPicPosition == 0) { 
     return m_picIDs.length - 1; 
    } else { 
     return mBackgroundPicPosition - 1; 
    } 
} 

private int getNextPosition() { 
    if (mBackgroundPicPosition == m_picIDs.length - 1) { 
     return 0; 
    } else { 
     return mBackgroundPicPosition + 1; 
    } 
}