Düğmelerin yığınlarını hareket ettirmem gereken bir uygulama var (tıpkı bir kart yığınının bir kısmını bir yığından diğerine taşımak gibi). Tüm düğmeleri bir xml düzeninde tanımladım ve tüm kullanıcılar için dokunma ve sürükleme dinleyicileri. Ekranın herhangi bir tuşunu tek tek sürükleyip bırakabilirim. ama bazı durumlarda yapmam gereken şey, aynı düğmeyi tıklattığım orijinal düğmenin üzerine yığılmış olan diğer düğmeleri sürüklemektir. Başka bir düğmeye basılmasının "kandırılması" veya simüle edilmesinin bir yolu var mı (böylece dinleyici bunu kaydeder)? Teşekkürler *** Düzenlendi 9/8/15 @Override public boolean onTouch (Görüntüle v, MotionEvent e) { // tosty ("mclicking:" + mClicking); int startpos = 0; anahtarı (e.getAction() & MotionEvent.ACTION_MASK) {Java'da çoklu düğme görünümlerini sürükleme
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;
ayrıca netleştirmek için, tek taş yapmam gerekenleri iyi bir örnektir. Kart destesinin herhangi bir yerinde bir kart üzerine tıklayın ve tıklanan orijinal düğmenin üstüne tüm kartları sürükleyin. Diğer tüm kartların arka planlarını, görünürlüğünü vs. değiştirebilirim, ancak hepsini sürükleyemiyorum. – huskyd97
Bir Görünüm'ü taşımak için zaten bir şeyiniz olduğunu varsayalım, o halde neden bir Düğmeyi hareket ettirmek yerine, içindeki Düğmelerle bir Layout oluşturup taşıyın? – Templerschaf
evet, doğru Doğrusal bir düzende düğmeler var. Doğrusal düzen görünümünü sürükleme gölge oluşturucuya iletirsem, tüm düğmeler hareket eder. ancak sadece düğmelerle geçici bir doğrusal düzeni yeniden oluşturmaya çalıştığımda, örneğin yığının yarısını taşımak istiyorum, sürükle ile ilgili sorunlara koşuyorum. İşte ben – huskyd97