package com.iangclifton.android.floatlabelexample; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import com.iangclifton.android.floatlabel.FloatLabel; public class MainActivity extends Activity { private int mTheme = android.R.style.Theme_Holo_Light_DarkActionBar; private static final String BUNDLE_KEY_THEME = MainActivity.class.getPackage() + ".theme"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { mTheme = savedInstanceState.getInt(BUNDLE_KEY_THEME, mTheme); } setTheme(mTheme); setContentView(R.layout.activity_main); // This is how you add a custom animator final FloatLabel floatLabel = (FloatLabel) findViewById(R.id.float_label_custom_animation_1); floatLabel.setLabelAnimator(new CustomLabelAnimator()); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { final int id = item.getItemId(); switch (id) { case R.id.action_toggle_theme: if (mTheme == android.R.style.Theme_Holo_Light_DarkActionBar) { mTheme = android.R.style.Theme_Holo; } else { mTheme = android.R.style.Theme_Holo_Light_DarkActionBar; } recreate(); return true; case R.id.action_about: startActivity(new Intent(this, AboutActivity.class)); return true; } return super.onOptionsItemSelected(item); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(BUNDLE_KEY_THEME, mTheme); } /** * LabelAnimator that uses a custom X shift and fade. * * @author Ian G. Clifton */ private static class CustomLabelAnimator implements FloatLabel.LabelAnimator { /*package*/ static final float SCALE_X_SHOWN = 1f; /*package*/ static final float SCALE_X_HIDDEN = 2f; /*package*/ static final float SCALE_Y_SHOWN = 1f; /*package*/ static final float SCALE_Y_HIDDEN = 0f; @Override public void onDisplayLabel(View label) { final float shift = label.getWidth() / 2; label.setScaleX(SCALE_X_HIDDEN); label.setScaleY(SCALE_Y_HIDDEN); label.setX(shift); label.animate().alpha(1).scaleX(SCALE_X_SHOWN).scaleY(SCALE_Y_SHOWN).x(0f); } @Override public void onHideLabel(View label) { final float shift = label.getWidth() / 2; label.setScaleX(SCALE_X_SHOWN); label.setScaleY(SCALE_Y_SHOWN); label.setX(0f); label.animate().alpha(0).scaleX(SCALE_X_HIDDEN).scaleY(SCALE_Y_HIDDEN).x(shift); } } }