1

我正在尝试用图片制作一个 Android 益智游戏。到目前为止,我所做的是:-我已经从 EditText 字段中获得了多少部分的图片;-我把剪好的图片放在了一个网格视图中,并得到了一个拼图桌;-我还使用 Collection.suffle(list) 对 gridview 中的图像进行混洗;

现在,我正在尝试对来自 gridview 的两个图像实现滑动效果。所以我想要实现的是类似于 CandyCrush 应用程序或这个http://www.youtube.com/watch?v=qUoP87fNB8w的滑动效果。我的意思是,我想按住图像并将其拖到顶部,以便它应该滑到顶部。如果我点击图片并滑动底部,它应该会随着它下面的图片而改变,依此类推......

这是我的代码:

        Reset = (Button) findViewById(R.id.BReset);
    SplitNo = (EditText) findViewById(R.id.edSplitBy);
    SplitBy = Integer.parseInt(SplitNo.getText().toString());
    ImgNo = SplitBy * SplitBy;
    puzzle = (GridView) findViewById(R.id.puzzle);
    rootImg = (ImageView) findViewById(R.id.source_image);
    splitImage(rootImg);
    formPuzzle(smallimages);
    Reset.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            Reset.setText("Reset");
            SplitNo.getEditableText().toString();
            SplitBy = Integer.parseInt(SplitNo.getText().toString());
            ImgNo = SplitBy * SplitBy;
            Collections.shuffle(smallimages);
            formPuzzle(smallimages);
        }

    });

这就是我如何形成这个谜题:

private void formPuzzle(ArrayList<PuzzleItem> smallimages) {

    SMI = new SmallImageAdapter(this, smallimages);
    puzzle.setAdapter(SMI);
    puzzle.setNumColumns(SplitBy);
    puzzle.setHorizontalSpacing(0);
    puzzle.setVerticalSpacing(0); }

PuzzleItem.class:

public class PuzzleItem {
Bitmap puzzlepartImage;
int correctPosition;

public PuzzleItem(Bitmap d, int index) {
    puzzlepartImage = d;
    correctPosition = index;
}

我用这门课只是为了记住碎片的位置,这样我就可以检查拼图是否完成了......

所以我只对如何通过从gridview拖动一个项目来实现滑动运动感兴趣......

谢谢 :)

编辑:我应该使用 OnTouchListener 吗?

4

2 回答 2

1

好的,我自己设法找到了解决方案:

private void formPuzzle(final ArrayList<PuzzleItem> smallimages) {

    SMI = new SmallImageAdapter(this, smallimages);
    puzzle.setAdapter(SMI);
    puzzle.setNumColumns(SplitBy);
    puzzle.setHorizontalSpacing(0);
    puzzle.setVerticalSpacing(0);

    puzzle.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN: {
                startX = event.getX();
                startY = event.getY();
                smallimage_Position = puzzle.pointToPosition((int) startX,
                        (int) startY);
                return true;
            }
            case MotionEvent.ACTION_MOVE: {
                endX = event.getX();
                endY = event.getY();
                Log.d("X", "..." +endX);
                Log.d("Y", "..." +endY);
                if(endX > startX + smallimage_Width/2 && (endY < startY - smallimage_Height/2 || endY < startY + smallimage_Height/2) ){
                    PuzzleItem p1 = SMI.smallimages.get(smallimage_Position);
                    PuzzleItem p2 = SMI.smallimages.get(smallimage_Position +1);
                    SMI.smallimages.set(smallimage_Position, p2);
                    SMI.smallimages.set(smallimage_Position +1, p1);
                    SMI.notifyDataSetChanged();
                    startX = endX*200;
                    startY = endY*200;


                }
                return true;
            }
            }
            return true;
        }
    });

幻灯片由 MotionEvent.Action_MOVE 给出,通过计算像素,您可以找出手指移动的方向......例如..如果我的 Action_Move 案例中的 if 是识别向右滑动......

我希望这会对你们中的一些人有所帮助......

于 2013-07-11T16:55:05.777 回答
1

在滑块益智游戏中实现幻灯片的另一种方法是使用游戏引擎。我推荐Cocos2D for Android,这里有一个详细的教程......

http://denvycom.com/blog/step-by-step-guide-on-how-to-build-your-first-slider-puzzle-game-in-cocos2d-for-android-part-1/

于 2014-02-20T09:48:17.343 回答