重なりの判定がズレる不具合に悩まされましたが
ボタンのプロパティーのlayout_heightとlayout_widthをfill_parentに設定すればいいようです。
fill_parentに設定する為にTableLayoutの中にボタンを置きました。
アイコン画像をドラッグしてボタンの上に重ねると初期画面にする。
package com.drag;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageView;
public class Drag extends Activity implements OnTouchListener {
/** Called when the activity is first created. */
ImageView target;
int currentX;
int currentY;
int offsetX;
int offsetY;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
target = (ImageView) findViewById(R.id.ImageView01);
this.target.setOnTouchListener(this);
}
public void onClickButton02(View v) {
Intent intent = new Intent(Drag.this, Drag.class);
startActivity(intent);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO 自動生成されたメソッド・スタブ
int x = (int) event.getRawX();
int y = (int) event.getRawY();
Button bt2 = (Button) findViewById(R.id.Button02);
if (event.getAction() == MotionEvent.ACTION_MOVE) {
int diffX = offsetX - x;
int diffY = offsetY - y;
currentX -= diffX;
currentY -= diffY;
target.layout(currentX, currentY, currentX + target.getWidth(),
currentY + target.getHeight());
offsetX = x;
offsetY = y;
} else if (event.getAction() == MotionEvent.ACTION_DOWN) {
offsetX = x;
offsetY = y;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
int[] offset = new int[2];
bt2.getLocationOnScreen(offset);
Rect rect = new Rect();
bt2.getHitRect(rect);
rect.offset(offset[0], offset[1]);
if (rect.contains((int) event.getRawX(), (int) event.getRawY())) {
// if (rect.contains(x, y)) {
bt2.performClick();
}
}
return true;
}
}
ダウンロード
0 件のコメント:
コメントを投稿