3

画像のGridViewがあります。これらはすべて/resディレクトリにあります(アプリに付属しています)。そのうちの1つを開けても問題ありません。ただし、ギャラリーで行うのと同じ方法でそれらの間をスクロールできるようにしたいです。つまり、画像上で指をスライドさせると、次の画像が表示されます。それを行う方法はありますか?ありがとう!

4

2 に答える 2

2

ViewPagerを使用できます

それを実装する方法を学ぶためのいくつかの良いリンクについては、android viewPager の実装を参照してください。

于 2012-07-14T14:58:41.830 に答える
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;
    }
}
于 2012-07-27T12:33:38.400 に答える