public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "AnimationStarter";
Button bounceBtn;
ImageView imagView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialization();
setListener();
}
private void initialization() {
bounceBtn = (Button) findViewById(R.id.button);
imagView = (ImageView) findViewById(R.id.imageView);
}
private void setListener() {
bounceBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
imagView.clearAnimation();
// imagView.setVisibility(View.VISIBLE);
// TranslateAnimation transAnim=new TranslateAnimation(0,0,0,-getDisplayHeight()/2);
TranslateAnimation transAnim = new TranslateAnimation(0, 0, -getDisplayHeight()/2, 0);
transAnim.setStartOffset(500);
transAnim.setDuration(3000);
transAnim.setFillAfter(true);
transAnim.setInterpolator(new BounceInterpolator());
transAnim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
Log.i(TAG, "Starting button dropdown animation");
}
@Override
public void onAnimationEnd(Animation animation) {
Log.i(TAG,
"Ending button dropdown animation. Clearing animation and setting layout");
imagView.clearAnimation();
final int left = imagView.getLeft();
final int top = imagView.getTop();
final int right = imagView.getRight();
final int bottom = imagView.getBottom();
imagView.layout(left, top, right, bottom);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
imagView.startAnimation(transAnim);
}
private int getDisplayHeight() {
return this.getResources().getDisplayMetrics().heightPixels;
}
}
,一定不要調用'的Thread.sleep(10)'主線程。它會阻止用戶輸入。我很驚訝它不會拋出異常。你可以使用handler.postDelayed來稍後在主線程中運行代碼,但是Marcin的答案更好,所以我不會將其作爲答案發布。 – 2014-10-06 19:14:23