Mam aplikację, w której muszę przenosić stosy przycisków (podobnie jak ruch części stosu kart z jednego stosu na drugi). Zdefiniowałem wszystkie przyciski w układzie xml i konfiguracji, aby dotknąć i przeciągnąć słuchaczy dla wszystkich. Potrafię przeciągać i upuszczać każdy przycisk na ekranie osobno. ale w niektórych przypadkach muszę przeciągnąć pozostałe przyciski ułożone na oryginalnym przycisku, który kliknąłem w tym samym czasie. Czy istnieje sposób "oszukania" lub zasymulowania innego przycisku (aby słuchacz go zarejestrował)? Dzięki *** Edytowane 9/8/15 @Override public boolean onTouch (Zobacz v, MotionEvent e) { // tosty ("mclicking:" + mClicking); int startpos = 0; przełącznik (e.getAction() & MotionEvent.ACTION_MASK) {Przeciąganie widoków z wieloma przyciskami w 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;
wyjaśnienie dalej, pasjans jest dobrym przykładem tego, co muszę zrobić. kliknij kartę w dowolnym miejscu stosu kart i przeciągnij wszystkie karty na górze oryginalnego przycisku, który został kliknięty. Mogę zmienić tło, widoczność itd. Wszystkich innych kart za pomocą pętli, ale po prostu nie mogę ich przeciągnąć. – huskyd97
Zakładam, że masz już coś do przeniesienia widoku, więc dlaczego nie, zamiast przesuwać przycisk, należy utworzyć i przenieść układ z przyciskami? – Templerschaf
tak, poprawne Mam przyciski w układzie liniowym. Jeśli przekażę widok układu liniowego do kreatora przeciągania, wszystkie przyciski będą się poruszać. ale gdy próbuję odtworzyć tymczasowy układ liniowy za pomocą tylko przycisków Chcę przenieść, na przykład połowę stosu, natrafiam na problemy z przeciąganiem. Oto kod, który próbowałem – huskyd97