2017-04-20 5 views
0

6 * 8 ImageViews를 포함하는 GridView가 있습니다. 이제 하나의 ImageView를 드래그하고 다른 ImageView로 그 위치를 바꿀 수 있기를 원합니다. 다른 OnDrag 메소드를 사용해 보았는데 나에게 효과가 없었습니다. 나는 이제 onTouch-Method로 시도했지만 그 계획대로 작동하지 않았다.안드로이드 드래그 앤 드롭 이미지 뷰 (GridView의 일부분)

이 문제가 이미 발생했거나 구현 방법을 알려주셨습니까?

public class GameActivity extends AppCompatActivity implements View.OnTouchListener{ 
private RelativeLayout rootLayout; 
private GridLayout gl_gamefield; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_game); 
rootLayout = (RelativeLayout) findViewById(R.id.rootLayout); 
createGameField(6,8); // columns, rows 
} 

public void createGameField(int columns, int rows){ 
    gl_gamefield = new GridLayout(this); 
    RelativeLayout.LayoutParams paramsGameField = new RelativeLayout.LayoutParams(getScreenSize()[0],(int)(getScreenSize()[1]-gameFieldFactor)); 
    paramsGameField.addRule(RelativeLayout.ABOVE, R.id.ad_view); 
    paramsGameField.setMargins(0,0,0,20); 
    gl_gamefield.setLayoutParams(paramsGameField); 
    gl_gamefield.setRowCount(rows); 
    gl_gamefield.setColumnCount(columns); 
    rootLayout.addView(gl_gamefield); 

    ImageView[][] fields = new ImageView[columns][rows]; 
    LinearLayout.LayoutParams layoutFields =new LinearLayout.LayoutParams((int)(getScreenSize()[0]/columns),(int)((getScreenSize()[1]-gameFieldFactor)/rows)); 
    int[][] colorFields = new int[columns][rows]; 

    for(int y = 0; y < rows; y++){ 
     for(int x = 0; x < columns; x++){ 
      fields[x][y] = new ImageView(this); 
      fields[x][y].setLayoutParams(layoutFields); 
      fields[x][y].setBackgroundColor(Color.rgb(30*x,20*y,10*(x+y))); 
      fields[x][y].setTag(x +""+ y); 
      fields[x][y].setOnTouchListener(this); 
      gl_gamefield.addView(fields[x][y]); 
     } 
    } 
} 

public int[] getScreenSize(){ 
    Display display = getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    int width = size.x; 
    int height = size.y; 

    int[] screenSize = {width, height}; 

    return screenSize; 
} 

public boolean onTouch(final View v, final MotionEvent event) { 

    switch(event.getAction()){ 
     case MotionEvent.ACTION_DOWN: 

      if(cdt_running) cdt.cancel(); 

      cdt_running=true; 
      cdt = new CountDownTimer(30000, 20) { 

       public void onTick(long millis) { 
        x=event.getRawX()-(v.getWidth()/2); 
        y=event.getRawY()-(v.getHeight()/2); 
        v.setX(x); 
        v.setY(y); 

       } 
       public void onFinish() { 
        cdt_running=false; 
       } 
      }.start(); 


      //ToastMsg("Action_down"); 
      break; 
     case MotionEvent.ACTION_UP: 
      ToastMsg("Action_up"); 
      break; 

    } 

    return false; 
} 

이것은 나의 마지막 온 터치 방법이었습니다. 그러나 그것은 내가 원하는대로 조용한 일을하지 않았다.

안드로이드 개발 경험이 없기 때문에 누군가가 나를 도울 수 있다면 어리석은 질문 일지 모르지만 다행입니다.

답변