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 件のコメント:
コメントを投稿