void android.view.View.layout(int l, int t, int r, int b)
Viewに対してleft,top,right,bottomを指定できます。
これなら他のLayoutでも可能っぽい。
試しにLinearLayoutで作ってみました。
import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.Button;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
/**
* レイアウトの配置の仕方のテスト クリック、タッチ、ロングタッチイベントの呼び出し順序確認
*
* @author kuro
*/
public class AndroidFormTest extends Activity implements OnClickListener,
OnLongClickListener, OnTouchListener {
private Button button1;
private int mState = 0;
private int offsetX = 0;// ボタンクリックしたスクリーンのX座標とボタンのX座標の差分
private int offsetY = 0;// ボタンクリックしたスクリーンのY座標とボタンのY座標の差分
private final int STATE_NONE = 0;
private final int STATE_DRAG = 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
LinearLayout linearLayout = new LinearLayout(this);
setContentView(linearLayout);
//ボタン作成
button1 = new Button(this);
// 各イベントリスナの登録
button1.setOnClickListener(this);
button1.setOnLongClickListener(this);
button1.setOnTouchListener(this);
linearLayout.addView(button1, new LinearLayout.LayoutParams(150,50));
button1.setText(button1.getLeft() + "," + button1.getTop());
}
@Override
public void onClick(View v) {
// TODO 自動生成されたメソッド・スタブ
button1.setText("onClick");
}
@Override
public boolean onLongClick(View v) {
// TODO 自動生成されたメソッド・スタブ
button1.setText("onLongClick");
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO 自動生成されたメソッド・スタブ
// ドラッグ
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
offsetX = (int) event.getX();
offsetY = (int) event.getY();
mState = STATE_DRAG;
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
mState = STATE_NONE;
break;
case MotionEvent.ACTION_MOVE:
if (mState == STATE_DRAG) {
int pointX, pointY;
pointX = (int) event.getRawX() - offsetX;
//ステータスバーの取得方法が不明のため直打ち(要変更)
pointY = (int) event.getRawY() - (offsetY + 50);
button1.layout(pointX, pointY, pointX + button1.getWidth(), pointY + button1.getHeight());
}
break;
}
return false;
}
}
0 件のコメント:
コメントを投稿