1
간단한 보드 게임과 같은 단순한 스크래블을 만들고 싶습니다. 내 보드의 모든 필드를 포함하는 RelativeLayout을 사용하여 XML 파일을 이미 만들었습니다. 이제 내가하고자하는 것은이 보드를 움직일 수있게하는 것입니다 - 그래서 사용자는 그것을 확대하고, 축소하고 화면 위로 움직일 수 있습니다. 이 문제를 해결하기 위해 나는 HERE에서 팁을 사용했습니다. TextView를 내 간단한 BoardView로 대체했습니다.android moving RelativeLayout가 포함 된보기
public class BoardView extends View {
public BoardView(Context context) {
super(context);
setContentView(R.layout.board);
}
}
불행히도 내 보드는 움직이지 않습니다. 도와주세요. 어쩌면 당신은 이런 종류의 게임에 완전히 다른 접근법을 가지고 있습니까? 나는 그것에 대해 듣고 싶다.
내 BoardActivity 코드 :
public class BoardActivity extends Activity implements OnTouchListener {
private int deltaX_;
private int deltaY_;
private ViewGroup root_;
private BoardView view_;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_board);
root_ = (ViewGroup) findViewById(R.id.rootBoard);
view_ = new BoardView(this);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(540, 540);
layoutParams.leftMargin = 50;
layoutParams.topMargin = 50;
layoutParams.bottomMargin = -2500;
layoutParams.rightMargin = -2500;
view_.setLayoutParams(layoutParams);
view_.setOnTouchListener(this);
root_.addView(view_);
}
public boolean onTouch(View v, MotionEvent event) {
final int X = (int) event.getRawX();
final int Y = (int) event.getRawY();
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) v.getLayoutParams();
deltaX_ = X - lParams.leftMargin;
deltaY_ = Y - lParams.topMargin;
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) v.getLayoutParams();
layoutParams.leftMargin = X - deltaX_;
layoutParams.topMargin = Y - deltaY_;
layoutParams.rightMargin = -2500;
layoutParams.bottomMargin = -2500;
view_.setLayoutParams(layoutParams);
break;
}
return true;
}
}
내 board.xml 레이아웃이 THIS에 비슷한입니다 :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:background="@drawable/special_square"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/square_a1" />
<ImageView
android:layout_toRightOf="@id/square_a1"
android:background="@drawable/normal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/square_a2" />
...and so on...
은 * 모든 * 귀하의 BoardView 코드인가? – Simon
이 단계에서 - 예. 나는 그것을 보여주고 움직 이기만을 바랄뿐입니다. 그런 다음 다른 행동에 집중할 것입니다. – karex
layoutParams를 설정 한 후 view_.invalidate()를 시도하십시오. – Simon