[英]An Issue animating a new TextView added to the activity on Nexus4 vs Other devices
我對Java和android編程非常陌生。
我正在嘗試創建一個按鈕,當按下該按鈕時,文本將出現在單擊的位置並立即淡出。 目前的問題是,當單擊時-確實出現了文本,但是動畫沒有播放,並且文本在幾秒鍾后消失(就像我想要的那樣)。
我已經在下面的問題上多次編輯了這個問題,在解決這些問題方面取得了一些進展,得到了大家的大力幫助。 謝謝!
我試過的代碼是這樣的:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mClickMe = (Button) findViewById(R.id.button1);
mRelativeLayout = (RelativeLayout) findViewById(R.id.rl);
mClickMe.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
int xClickPos = (int) event.getRawX();
int yClickPos = (int) event.getRawY();
final TextView scorePop = new TextView(getApplicationContext());
scorePop.setText("+10");
scorePop.setX(xClickPos);
scorePop.setY(yClickPos);
scorePop.setVisibility(TextView.INVISIBLE);
// Create the score pop animation
Animation scoreAnimation = new AlphaAnimation(1, 0);
scoreAnimation.setDuration(1000);
scoreAnimation.setAnimationListener (new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
scorePop.setVisibility(TextView.VISIBLE);
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation animation) {
mRelativeLayout.removeView(scorePop);
}
});
mRelativeLayout.addView(scorePop);
scorePop.setAnimation(scoreAnimation);
scoreAnimation.start();
}
return false;
}
});
}
編輯:我還注意到,如果在不同位置上快速單擊按鈕,則文本將出現在這些位置,並隨着“波動”淡出而消失。 但是,如果單擊一次,該文本將出現並消失,但沒有動畫。 謝謝您的幫助!
編輯2:在我到達這里的幫助下,問題似乎與設備有關。 我正在使用Nexus 4,並正在運行一個仿真器,以將我的應用也測試為Nexus 4。 奇怪的是,為其他設備(例如Galaxy Nexus)運行模擬器似乎可以解決該問題。
編輯:我能夠重新創建您的原始錯誤,它與setX(),setY()
。 執行完這些方法中的任何一個之后, TextView
都會變得“麻木”,並且不會設置動畫。 我認為的解決方法是設置布局的邊距,而不是TextView
的坐標:
// Set the margins instead of the actual position
ViewGroup.MarginLayoutParams params=(ViewGroup.MarginLayoutParams)scorePop.getLayoutParams();
params.leftMargin=xClickPos;
params.topMargin=yClickPos;
在我的設備Galaxy Nexus上,它也第一次很好地顯示了動畫。 可能是您的設備在這里花費了時間“ mRelativeLayout.addView(scorePop);” 在那之后添加一點延遲,然后開始動畫它應該運行良好。
試試吧...
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fadein);
txtMessage = (TextView) findViewById(R.id.txtMessage);
btnStart = (Button) findViewById(R.id.btnStart);
// load the animation
animFadein = AnimationUtils.loadAnimation(getApplicationContext(),
R.anim.fade_in);
// set animation listener
animFadein.setAnimationListener(this);
// button click event
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtMessage.setVisibility(View.VISIBLE);
// start the animation
txtMessage.startAnimation(animFadein);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.