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;
}
이것은 나의 마지막 온 터치 방법이었습니다. 그러나 그것은 내가 원하는대로 조용한 일을하지 않았다.
안드로이드 개발 경험이 없기 때문에 누군가가 나를 도울 수 있다면 어리석은 질문 일지 모르지만 다행입니다.