我正试着用一张图片做一个机器人益智游戏。到目前为止,我所做的是:-我已经将图片剪切成我从EditText字段获得的多少部分;-我已经将剪切的图片放在一个网格视图中,并得到了一个拼图表格;-我还使用了Collection.suffle(列表)来对网格视图中的图像进行置乱;
现在,我正尝试在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;
}我使用这个类只是为了记住棋子的位置,这样我就可以检查拼图是否完成了……
因此,我只对如何通过从网格视图中拖动项目来实现滑动运动感兴趣……
谢谢:)
编辑:我应该使用OnTouchListener吗?
发布于 2013-07-12 00:55:06
好了,我已经设法自己找到了解决方案:
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案例中识别到向右滑动...
我希望这能帮助你们中的一些人..。
发布于 2014-02-20 17:48:17
在滑块益智游戏中实现幻灯片的另一种方法是使用游戏引擎。我推荐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/
https://stackoverflow.com/questions/17589097
复制相似问题