안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요. 현재 버튼을 드레그해서 이동시키는 걸 해보고 있습니다.
추가버튼을 만들고, 버튼을 눌렀을때, 드레그전용 버튼이 하나씩 추가 되는데요.
문제는 추가시킨 버튼을 이동시키고, 다시한번 추가하면 기존에 버튼들이 전부
초기에 위치로 이동을 하는데... 원인을 모르겠습니다.
Activity
DragButton.java
드레그는 문제없이 됩니다. 추가이벤트(OnClickListener)를 하는 지점에서 추가되어진 모든 버튼이 처음 위치로 이동하게 됩니다.
답변 부탁드릴게요.
추가버튼을 만들고, 버튼을 눌렀을때, 드레그전용 버튼이 하나씩 추가 되는데요.
문제는 추가시킨 버튼을 이동시키고, 다시한번 추가하면 기존에 버튼들이 전부
초기에 위치로 이동을 하는데... 원인을 모르겠습니다.
Activity
public class Sample extends Activity implements OnTouchListener { Context mContext; WebView webView; WebSettings setting; RelativeLayout mainLayout; Button keyDelBtn; private Rect rect = new Rect(); private Animation anime; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); mContext = this; mainLayout = new RelativeLayout(mContext); setContentView(mainLayout); Button keyAddBtn = new Button(mContext); RelativeLayout.LayoutParams keyAddParam = new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); keyAddBtn.setId(1); keyAddBtn.setBackgroundResource(android.R.drawable.alert_dark_frame); keyAddBtn.setLayoutParams(keyAddParam); keyAddBtn.setPadding(10, 10, 10, 10); keyAddBtn.setText("+"); keyAddBtn.setTextColor(Color.WHITE); keyAddBtn.setTextSize(18); keyAddBtn.setTypeface(null, Typeface.BOLD); keyAddBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mainLayout.addView(getNewButton("A")); } }); mainLayout.addView(keyAddBtn); } private DragButton getNewButton(String key) { RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); param.addRule(RelativeLayout.CENTER_IN_PARENT); DragButton btn = new DragButton(mContext); btn.setLayoutParams(param); btn.setText(key); btn.setBackgroundResource(android.R.drawable.alert_light_frame); btn.setTextColor(Color.BLACK); btn.setTextSize(18); btn.setTypeface(null, Typeface.BOLD); btn.setOnTouchListener(this); return btn; } @Override public boolean onTouch(View view, MotionEvent event) { if (view instanceof DragButton) { DragButton key = (DragButton) view; int x = (int) event.getRawX(); int y = (int) event.getRawY(); if (event.getAction() == MotionEvent.ACTION_MOVE) { int diffX = key.getOffsetX() - x; int diffY = key.getOffsetY() - y; key.setCurrentX(key.getCurrentX() - diffX); key.setCurrentY(key.getCurrentY() - diffY); key.layout(key.getCurrentX(), key.getCurrentY(), key.getCurrentX() + key.getWidth(), key.getCurrentY() + key.getHeight()); key.setOffsetX(x); key.setOffsetY(y); } else if (event.getAction() == MotionEvent.ACTION_DOWN) { key.setCurrentX(key.getLeft()); key.setCurrentY(key.getTop()); key.setOffsetX(x); key.setOffsetY(y); } else if (event.getAction() == MotionEvent.ACTION_UP) { keyDelBtn.getHitRect(rect); if (rect.contains(x, y)) { key.setAnimation(anime); key.startAnimation(anime); key.setVisibility(View.GONE); key = null; } key.layout(key.getCurrentX(), key.getCurrentY(), key.getCurrentX() + key.getWidth(), key.getCurrentY() + key.getHeight()); } } return true; } }
DragButton.java
public class DragButton extends Button { private int currentX; private int currentY; private int offsetX; private int offsetY; publicDragButton(Context context) { super(context); } public int getCurrentX() { return currentX; } public void setCurrentX(int currentX) { this.currentX = currentX; } public int getCurrentY() { return currentY; } public void setCurrentY(int currentY) { this.currentY = currentY; } public int getOffsetX() { return offsetX; } public void setOffsetX(int offsetX) { this.offsetX = offsetX; } public int getOffsetY() { return offsetY; } public void setOffsetY(int offsetY) { this.offsetY = offsetY; } }
드레그는 문제없이 됩니다. 추가이벤트(OnClickListener)를 하는 지점에서 추가되어진 모든 버튼이 처음 위치로 이동하게 됩니다.
답변 부탁드릴게요.

현재 일본에서 일하고 있는 프로그래머입니다.
안드로이드 경력은 일년이 좀넘어가는 중입니다.
Market URL
https://market.android.com/developer?pub=FattyRabbit