2013-05-28 7 views
6

Bir Android etkinliğinde bir görüntüyü dinamik olarak oluşturmaya ve taşımaya çalışıyorum. Ancak, setX() ve setY() yöntemleri düzgün çalışmıyor gibi görünüyor. İlk oluşturulduğu ve yerleştirildiği zaman bir görüntünün konumunu doğru olarak ayarlar, ancak onu güncellemeye yönelik herhangi bir giriş, görüntüde yanlış noktaya yerleştirilir. Örneğin, görüntü aşağıdaki kodu taşır: ACTION_MOVE üzerinde görüntü x ve y pozisyon değerleri aynı kalır halde taşınırAndroid setX() ve setY() garip davranıyor

ImageView image; 
RelativeLayout layout = (RelativeLayout)findViewById(R.id.activity_this); 

if(action == MotionEvent.ACTION_DOWN){ 

    image = new ImageView(MyClass.this);        
    layout.addView(image, width, height); 
    image.setX(206); 
    image.setY(206); 
} 
else if(action == MotionEvent.ACTION_MOVE){ 

    if(image != null){ 
     image.setX(206); 
     image.setY(206); 
    } 
} 

. Resmin ebeveyni aynı kalır. Boyut aynı kalır. Eğer x ve y değerlerini elde edersem, hala 206 diyecektir, ancak artık faaliyete (206, 206) yerleştirilmez. Bunun neden olduğu konusunda kayboldum. Fiziksel olarak konumu değiştirmesi dışında resmin değiştirildiğine dair hiçbir belirti bulamıyorum.

cevap

13

Gerçekten, bu olmamalıydı. Alternatif olarak, başka bir değişken ayarlamayı deneyin ve x ve y ayarını ona getirin veya x değerini alın ve y'yi alın ve aynı konum için her birine bir 0 ekleyin.

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); //WRAP_CONTENT param can be FILL_PARENT 
params.leftMargin = 206; //XCOORD 
params.topMargin = 206; //YCOORD 
childView.setLayoutParams(params); 

fazla bilgi var var -

aradığınız varsa, Android - Use of view.setX() and setY in api 8 belirtildiği üzere

da hatta API önce böyle 8. LayoutParams eser çalışan başka bir çözüm yoktur. Umarım bu,

+1

Tyvm'de bir değişikliğe neden olur. Params kullanmak benim için çalışıyor. Yine de setX ve Y ile olan biteni merak ediyorum. Her şeyi denedim ama her zaman aşağı olayda ayarlandıktan sonra bir değer ayarladım (yeni değeri nasıl ayarlamam olursa olsun) görüntü yanlış yere taşınır. Onunla test ettiğim emülatörde yaklaşık 30 piksel kadar sabit bir değer ve solda. Görüşün ebeveyni ya da başka bir şeyini değiştirmek zorunda olduğunu düşündüm ama bu o değil. Tam olarak bulabileceğim farklı bir şey yok. – user2423199

+0

Yoğunluk olabilir mi? Sayıları programatik olarak ayarlarken, px değerlerini dp değerlerine dönüştürmek için getResources(). GetDisplayMetrics() .gensi ile çoğalmalısınız. – marmor

1

Aynı sorunla karşılaşır. View.setLeft(int)/View.setTop(int) benim için çalıştı

+0

Benim için çalışmadı. Sadece benim görüşüm dikey olarak – tieorange

+1

@tieorange aşağı oyladı? Senin için çalışmayan her cevap için aynısını yapman gerektiğine inanıyorum. Ama genel olarak, daha farklı cevaplar, başka bir sorunun çözümü ile zamanınızı kurtarmanın daha yüksek şanslarıdır, çünkü benzer problemler aslında farklı çözümlere sahip olabilir ve sizin için işe yarayabilir. Ya da olmayabilir. Sadece bu durumda kazmaya devam et. Bu yüzden, aslında başkalarına yardımcı olabileceğinden, özel durumunuz için çalışmazsa, oylamada cevap vermek için pratik bir neden göremiyorum. Sizin için neyin işe yaradığını oylama yoluyla farklı çözümler paylaşmaya teşvik edin –

0

Etkinliğiniz tam ekran modunda mı? Eğer onu tam ekran yapmaya çalışmayın ve sorununuzu çözmelisiniz.

0

Yanıt vermek için çok geç, ancak başkası aynı sorunla karşı karşıyaysa. o düzeni dosyasında kenarların, bu benim için sabit oldu: birisi olarak

android:paddingBottom="16dp" 
android:paddingLeft="16dp" 
android:paddingRight="16dp" 
android:paddingTop="16dp" 
0

aslında bu sorunu bakan ben parentView herhangi dolgu kaldırarak bu sorunu çözmek zorunda. Dolgu görüntüsü, yanıt için düzen boyutu