Итак, у меня есть настраиваемое представление, настроенное в коде (для него не определено макет XML), и мне интересно, как правильно определить идентификатор дочерних представлений.У меня DO есть xml-файл, определяющий id, похожий на этот ... Но, как я понимаю, по крайней мере, поскольку у меня нет xml-разметки, нет AttribSet для передачи ... так что мои конструкторы все простоТипы (контекстный контекст).
<resources>
<item type="id" name="textview1"/>
<item type="id" name="textview2"/>
</resources>
И мое представление выглядит примерно так:
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;
}
}
Вот действие, которое использует представление ..
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);
}
}
Основная проблема заключается в том, что загружаемая мной анимация (которая определена в xml) и запускает абсолютно ничего не делает.Я получаю в журнале утверждение «анимация запущена», но это все.Это никогда не заканчивается и никогда ничего не делает, когда я подражаю этому.Это как будто начинается, но на самом деле не работает.Я думаю проблема в том, что, возможно, анимация ожидает использовать определения макета идентификатора XML для своей работы, но поскольку findViewById () возвращает NULL, я предполагаю, что часть повреждена (и, таким образом, анимацияне работает).Итак ... по крайней мере сейчас, я хочу выяснить, что я делаю неправильно с настройкой идентификатора, чтобы я мог заставить findViewById () возвращать правильное представление, а не NULL ... И тогда, возможно, анимация будет работать,(или если после этого он все еще не работает, мне придется взглянуть на определение анимации в коде также вместо xml)
Любая помощь или предложения приветствуются.