/**
   * Get the ghostly gesture hand for custom gestures
   *
   * @return a View representing the ghostly hand
   */
  public View getHand() {
    final View mHandy =
        ((LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE))
            .inflate(R.layout.handy, null);
    addView(mHandy);
    AnimationUtils.hide(mHandy);

    return mHandy;
  }
 private void fadeInShowcase() {
   AnimationUtils.createFadeInAnimation(
           this,
           new AnimationStartListener() {
             @Override
             public void onAnimationStart() {
               setVisibility(View.VISIBLE);
             }
           })
       .start();
 }
 private void fadeOutShowcase() {
   AnimationUtils.createFadeOutAnimation(
           this,
           new AnimationEndListener() {
             @Override
             public void onAnimationEnd() {
               setVisibility(View.GONE);
             }
           })
       .start();
 }
 private void moveHand(
     float offsetStartX,
     float offsetStartY,
     float offsetEndX,
     float offsetEndY,
     AnimationEndListener listener) {
   AnimationUtils.createMovementAnimation(
           mHandy,
           showcaseX,
           showcaseY,
           offsetStartX,
           offsetStartY,
           offsetEndX,
           offsetEndY,
           listener)
       .start();
 }
 /**
  * Point to a specific point on the screen
  *
  * @param x X-coordinate to point to
  * @param y Y-coordinate to point to
  */
 public void pointTo(float x, float y) {
   AnimationUtils.createMovementAnimation(mHandy, x, y).start();
 }
 /**
  * Point to a specific view
  *
  * @param view The {@link View} to Showcase
  */
 public void pointTo(View view) {
   float x = AnimationUtils.getX(view) + view.getWidth() / 2;
   float y = AnimationUtils.getY(view) + view.getHeight() / 2;
   pointTo(x, y);
 }