Tôi có một ứng dụng mà tôi cần phải di chuyển các ngăn xếp của các nút (giống như di chuyển một phần của một chồng thẻ từ một đống khác). Tôi đã xác định tất cả các nút trong một bố trí xml và thiết lập cảm ứng và kéo người nghe cho tất cả. Tôi có thể kéo và thả bất kỳ nút nào quanh màn hình riêng lẻ. nhưng những gì tôi cần làm trong một số trường hợp là kéo các nút khác xếp chồng lên nhau trên đầu nút gốc mà tôi đã nhấp vào cùng một lúc. Có cách nào để "lừa" hoặc mô phỏng một nút khác được nhấn (để người nghe đăng ký nó) không? Cảm ơn *** Đã chỉnh sửa 9/8/15 @Override boolean onTouch công khai (Xem v, MotionEvent e) { // tosty ("mclicking:" + mClicking); int startpos = 0; switch (e.getAction() & MotionEvent.ACTION_MASK) {Kéo nhiều lượt xem nút trong java
case MotionEvent.ACTION_DOWN:
isWastePile=false;
get_selected_deck(v); // determines which of 7 decks or layouts in the tablau you have
// clicked
FromDeck = selecteddeck;
FromDeckCard = deckcard;
FromDeckButton = deckbutton;
// if (!mClicking) {
mClicking = true;
//String piecetag = (String) v.getTag();
// // IDEA!!!/ ///
/*
* I wrote a function that finds all the ImageButtons below where
* the user clicked, and set them all to invisible. I then created a
* new Linear Layout within the Linear Layout that the user clicked (during the ACTION_DOWN event),
* and passed that into the Drag Shadow builder during the ACTION_MOVE event.
*
* Once into the ACTION_DROP portion, I simply referenced global
* variables to figure out if the user dropped in one or multiple
* ImageButtons, and dealt with them accordingly.
*/
//if (!isWastePile) {
//draglayout.setClipChildren(false);
lltemp = new LinearLayout(this);
lltemp.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams llparams = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
llparams.setMargins(0, -52, 0, 0);
lltemp.setLayoutParams(llparams);
draglayout.addView(lltemp);
for (int i = 0; i < deckstack_list[selecteddeck].size(); i++) {
if (v == (draglayout.getChildAt(i))) {
startpos = i;
for (int o = i; o < deckstack_list[selecteddeck].size(); o++) {
// layout5.removeViewAt(o);
draglayout.getChildAt(o).setVisibility(View.GONE); // all
// buttons
// being
dragtempstack.push((Integer) deckstack_list[selecteddeck].get(o)) ; // dragged
// to
// invisible
// then recreate another linear layout within layout5
// and pass to dragshadow builder
// to do
// also set a GLOBAL variable with stack count (number
// of cards dragged)
lltemp.setClipChildren(false);
lltemp.addView(createtempButtons(o, startpos));
}
}
}
//} // end if wastepile check statement
//tosty("dragtempstack size: "+dragtempstack.size());
break;
case MotionEvent.ACTION_MOVE:
//tosty("Action MOVE");
Log.i("ACTION Event: ", "ACTION MOVE");
// v = layout5;
v = lltemp;
v.setVisibility(View.INVISIBLE);
v.bringToFront();
v.invalidate();
v.setVisibility(View.VISIBLE);
//DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
DeckDragShadow shadowBuilder = new DeckDragShadow(v);
v.startDrag(null, shadowBuilder, v, 0);
correctDrag = false;
break;
private Button createtempButtons(final int i, final int startpos) {
final Button b = new Button(this);
b.setOnTouchListener(this);
b.setOnDragListener(new DeckDragListener());
b.setBackgroundResource(cardimagearray[dragdeckstack.get(i)]);
float width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
45, getResources().getDisplayMetrics());
float height = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
61, getResources().getDisplayMetrics());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
(int) width, (int) height);
float margTop = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
-36, getResources().getDisplayMetrics());
if (i > startpos) {
params.setMargins(0, -57, 0, 0);
}
b.setLayoutParams(params);
// b.bringToFront();
// b.invalidate();
b.setVisibility(View.VISIBLE);
return b;
để làm rõ hơn nữa, solitaire là một ví dụ tốt về những gì tôi cần phải làm. nhấp vào một thẻ ở bất kỳ đâu trong ngăn xếp thẻ và kéo tất cả các thẻ lên trên nút gốc đã được nhấp. Tôi có thể thay đổi hình nền, khả năng hiển thị, vv của tất cả các thẻ khác với một vòng lặp, nhưng dường như không thể kéo tất cả chúng. – huskyd97
Tôi cho rằng bạn đã có thứ gì đó để di chuyển Chế độ xem, vậy tại sao không, thay vì di chuyển một Nút, hãy tạo và di chuyển Bố cục bằng các Nút trong đó? – Templerschaf
có, chính xác tôi có các nút trong bố cục tuyến tính. Nếu tôi chuyển chế độ xem bố cục tuyến tính vào trình tạo bóng kéo, tất cả các nút sẽ di chuyển. nhưng khi tôi cố gắng tạo lại bố cục tuyến tính tạm thời chỉ bằng các nút tôi muốn di chuyển, ví dụ như một nửa số cọc, tôi gặp phải sự cố khi kéo. Dưới đây là một số mã mà tôi đã cố gắng – huskyd97