私はAndroidアプリケーションを作成していますが、LinearLayoutのビューをメインコンテナRelativeLayoutにドラッグしてから、RelativeLayoutに追加した後にそのビューのOnTouchListenerを設定し直す必要があります。問題はビューを追加した後に不適切に動作することです、私は、ビューの左または上に触れると、ビューが左または上に移動することを意味するので、これは起こらないはずです。オンタッチ・リスナーは、ビューの左上をクリックすると左上に移動するのはなぜですか?
私は景色がひどく振る舞う理由のような理由を見つけようとしてきたが、一つの理由の可能性がないフィギュア、誰かがここに私を助けてくださいすることができ、ここで
は私のコードです。 ...
public class MovingViewsActivity extends Activity implements OnTouchListener {
int i = 0;
Button btn;
private Button btn1, btn2, btn3;
private RelativeLayout layout;
private LayoutParams params;
List<ImageView> imgList;
private ImageView image;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imgList = new ArrayList<ImageView>();
layout = (RelativeLayout) findViewById(R.id.LinearLayout01);
params = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
btn = (Button) findViewById(R.id.btn);
btn.setDrawingCacheEnabled(true);
btn1 = (Button) findViewById(R.id.btn1);
btn1.setDrawingCacheEnabled(true);
btn2 = (Button) findViewById(R.id.btn2);
btn2.setDrawingCacheEnabled(true);
btn3 = (Button) findViewById(R.id.btn3);
btn3.setDrawingCacheEnabled(true);
btn.setOnTouchListener(this);
btn1.setOnTouchListener(this);
btn2.setOnTouchListener(this);
btn3.setOnTouchListener(this);
}
OnTouchListener dragit = new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) v
.getLayoutParams();
if (event.getAction() == MotionEvent.ACTION_DOWN) {
} else if (event.getAction() == MotionEvent.ACTION_UP) {
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
params.topMargin = (int) event.getRawY() - (v.getHeight()) - 30;
params.leftMargin = (int) event.getRawX() - (v.getWidth()) + 30;
v.setLayoutParams(params);
}
v.invalidate();
return true;
}
};
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
i++;
image = new ImageView(getApplicationContext());
image.setImageBitmap(btn1.getDrawingCache());
image.setId(i);
image.setVisibility(View.INVISIBLE);
layout.addView(image, params);
imgList.add(image);
Log.d("Number of VIEWS", "Number of VIEWS " + imgList.size()
+ " ID: " + image.getId());
v.getParent().requestDisallowInterceptTouchEvent(true);
}
if (event.getAction() == MotionEvent.ACTION_UP) {
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {
image.setVisibility(View.VISIBLE);
int left = (int) event.getRawX() - (v.getWidth()/2);
int top = (int) event.getRawY() - (v.getHeight());
image.setPadding(left, top, 0, 0);
image.invalidate();
}
for (ImageView img : imgList) {
img.setOnTouchListener(dragit);
}
return true;
}
}
ご協力いただければ幸いです。