Kodda özel bir görünüm oluşturdum (bunun için XML düzeni tanımlanmadı) ve Çocuğun Views ID'sinin doğru tanımlanmasını nasıl sağlayacağımı merak ediyorum. I DO DO 'ya benzer bir kimlik tanımlayan bir xml dosyası var. Ama en azından, benim için bir AttribSet geçirecek bir xml düzenine sahip olmadığımdan, bunu anlıyorum .. bu yüzden benim kurucularım sadece (İçerik bağlamında) türleri.Özel Görünüm - Kimliklerini findViewById() aracılığıyla bulunabilecekleri şekilde nasıl ayarlayabilirim?
<resources>
<item type="id" name="textview1"/>
<item type="id" name="textview2"/>
</resources>
Ve görünümü bu satırlar boyunca bir şey arar: Burada
public class MyView extends View {
protected RelativeLayout baseLayout;
protected TextView textView1;
protected TextView textView2;
public MyView(Context context) {
super(context);
LayoutParams fill = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
setLayoutParams(fill);
Resources res = getResources();
baseLayout = new RelativeLayout(context);
baseLayout.setLayoutParams(fill);
textView1 = new TextView(context);
textView1.setId(R.id.textview1);
// other init stuff here
textView2 = new TextView(context);
textView2.setId(R.id.textview2);
// other init stuff here
baseLayout.addView(textView1);
baseLayout.addView(textView2);
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
// *snip lots of stuff*
baseLayout.draw(canvas);
}
// This is only here because findViewById() returns NULL when I search
public TextView getTextView1() {
return textView1;
}
// This is only here because findViewById() returns NULL when I search
public TextView getTextView2() {
return textView2;
}
}
görünümü kullanan Etkinlik var ..
public class MyActivity extends Activity {
// This is only here because findViewById() returns NULL when I search
private MyView myView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Resources res = getResources();
myView = new myView(this);
setContentView(myView);
// This returns NULL. :/
// final TextView textView1 = (TextView) findViewById(R.id.textView1);
// This is only here because findViewById() returns NULL when I search..
final TextView textView1 = myView.getTextView1();
final Animation anim = AnimationUtils.loadAnimation(this, R.anim.my_animation);
textView1.setAnimation(anim);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation _anim) {
Log.v("InsideAnimation", "Animation ended");
textView1.setVisibility(View.INVISIBLE);
}
@Override
public void onAnimationRepeat(Animation _anim) {
Log.v("InsideAnimation", "Animation repeated");
}
@Override
public void onAnimationStart(Animation _anim) {
Log.v("InsideAnimation", "Animation started");
}
});
anim.reset();
textView1.startAnimation(anim);
}
}
temel sorun (animasyon ı yüklemek olmasıdır ki xml) 'de tanımlanır ve başlangıç kesinlikle hiçbir şey yapmaz. "Animasyon başlatıldı" bir Log ifadesi alıyorum ama bu kadar. Asla bitmez ve taklit ettiğimde hiçbir zaman bir şey yapmaz. Başlıyor gibi, ama aslında çalışmıyor. I düşünmek sorunu belki de animasyon üzerinde çalışmak için xml id düzen tanımları kullanmayı bekliyor, ancak findViewById() NULL döndürdüğünden, bu parçanın bozuk olduğunu varsayıyorum (ve böylece animasyon çalışmaz). Yani ... en azından şimdilik, ID ayarlayarak neyi yanlış yaptığımı öğrenmek istiyorum, böylece ViewViewById(), NULL değil doğru görüntüyü döndürür ... Ve sonra muhtemelen animasyon çalışacaktır . (ya da bu noktadan sonra hala çalışmıyorsa, belki de xml yerine koddaki animasyonu tanımlamaya da bakmam gerekecek)
Herhangi bir yardım veya öneri takdir edilir.
TextView IS'nin örneklendiğini garanti edebilirim .. Bunu test etmek için Log.v ifadelerini (daha önce hiç yayınlamadan önce) çalıştırdım.Anlatımın çıktısı, kimliği ile bulmaya çalışmak çıktısından önce mevcuttu. Görünümü genişletmek için - zaten View yerine RelativeLayout'u genişletmeyi zaten denedim ... ama bunu yaptığımda, onDraw yönteminde sahip olduğum diğer şeyler artık çizmiyor (ki eminim ki potansiyel olarak düzeltebiliyorum, ama ben Neden çizemediğinden emin değilsin ... ama hiçbir şey-değil, değil. (devam) –
Ancak, sadece sadece findViewById() .. yerine çalışabilirim myView.findViewById() çalıştırmayı deneyebilirsiniz. Yedikten sonra size haber vereceğim. Sadece bir xml düzeni içinde tasarlama açısından. Bunu yapabileceğimi biliyorum (ve aslında zaten var). Ama problem şu ki, ekranın boyutlarına dayanan değerleri hesaplamak istiyorum ... XML kullanmazsa, xml yerine kod içinde çalışıyorum. Programımın, karşılaştığım her tür ekran için bir xml düzenine sahip olmak zorunda kalmadan, birden fazla ekranda aynı görünmesini istiyorum ... Bununla birlikte, bahsettiğiniz şeyi deneyeceğim. –
Bu yüzden bana RelativeLayout'u veren bir yöntem ekledim ve sonra myRelativeLayout.findViewById (R.id.textview1) 'i çalıştırdım ve aslında doğru nesneyi döndürdüm, bu yüzden önerdiğiniz şey işe yaradı. :) Ne yazık ki, animasyon hala hiçbir şey yapmıyor gibi görünüyor .. Sooooo .. Ben de kod içinde animasyon programlamak zorunda kalabilirsiniz. Bilmiyorum. Ben yeni bir programcı değilim - sadece Android için yeni ve bana garip gelen bazı şeyler yapar. –