【问题标题】:onTouch movement for ImageView?ImageView 的 onTouch 运动?
【发布时间】:2013-05-19 18:01:51
【问题描述】:

我对 Android 开发比较陌生。

但我想知道是否可以移动这些图像,以便它们可以在网格中相互交换。因为它是我正在尝试实现的棋盘游戏。

这就是它的样子:http://i.imgur.com/2shAuGd.png

图像数组的代码:

    private Integer[] mThumbIds = {
        R.drawable.blank, R.drawable.blank, R.drawable.peg, R.drawable.peg, R.drawable.peg, R.drawable.blank, R.drawable.blank, 
        R.drawable.blank, R.drawable.blank, R.drawable.peg, R.drawable.peg, R.drawable.peg, R.drawable.blank, R.drawable.blank, 
        R.drawable.peg, R.drawable.peg, R.drawable.peg, R.drawable.peg, R.drawable.peg, R.drawable.peg, R.drawable.peg, 
        R.drawable.peg, R.drawable.peg, R.drawable.peg, R.drawable.empty, R.drawable.peg, R.drawable.peg, R.drawable.peg,
        R.drawable.peg, R.drawable.peg, R.drawable.peg, R.drawable.peg, R.drawable.peg, R.drawable.peg, R.drawable.peg, 
        R.drawable.blank, R.drawable.blank, R.drawable.peg, R.drawable.peg, R.drawable.peg, R.drawable.blank, R.drawable.blank, 
        R.drawable.blank, R.drawable.blank, R.drawable.peg, R.drawable.peg, R.drawable.peg, R.drawable.blank, R.drawable.blank,
        };

XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

<GridView  
    android:id="@+id/gridview"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:layout_marginTop="40dp"
    android:columnWidth="50dp"
    android:numColumns="7"
    android:verticalSpacing="2dp"
    android:horizontalSpacing="2dp"
    android:stretchMode="columnWidth"
    android:gravity="center" />

</LinearLayout> 

【问题讨论】:

  • 您是否尝试为您的游戏实现拖放功能?
  • 不,你按一个钉子来选择它,然后按一个空白的地方把它移到那里。你不需要拖动它。
  • 这是否适用于我的代码?因为数组中的元素没有单独的 id。在主帖中检查我的 xml。
  • @user1902535 我没试过。拖放应该可以工作

标签: java android gridview imageview


【解决方案1】:

如果您不需要拖放,这应该很简单。

private View firstClicked = null;

private OnClickListener swapImages = new OnClickListener() {

    @Override
    public void onClick(View v) {
        if(firstClicked != null){
            LayoutParams p1 = firstClicked.getLayoutParams();
            LayoutParams p2 = v.getLayoutParams();
            v.setLayoutParams(p1);
            firstClicked.setLayoutParams(p2);
                            firstClicked = null;
        }
        else 
            firstClicked = v;
    }
};

这样你只需交换它们的位置,而不是它们内部的图像。

编辑:但如果这干扰了您的游戏逻辑,您只需交换而不是布局参数,您只需交换它们的图像。

编辑:此代码交换您的可绘制对象,您需要创建自己的逻辑

package com.example.stackoverflow;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
import android.app.Activity;
import android.graphics.drawable.Drawable;


public class Game extends Activity {

private ImageView firstClicked = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.game);

            GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));

        gridview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                Toast.makeText(Game.this, "" + position, Toast.LENGTH_SHORT).show();
                if(firstClicked != null){
                    ImageView v2 = (ImageView)v;
                    Drawable d2 = v2.getDrawable();
                    Drawable d1 = firstClicked.getDrawable();
                    v2.setImageDrawable(d1);
                    firstClicked.setImageDrawable(d2);
                    firstClicked = null;
                }
                else {
                    firstClicked = (ImageView)v;
                }
            }

        });
    }
}

希望这对您有所帮助并享受您的工作。

【讨论】:

猜你喜欢
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
相关资源
最近更新 更多