title: How to blink image in ImageView (Android)
body: <p>I am working on a wallpaper app in which I am displaying image with <code>ImageView</code> as a splash screen. </p>
  
  <p>Now I want to blink <code>ImageView</code> image as a splash screen.</p>
  
  <p><strong>This is my splash screen code:</strong></p>
  
  <pre><code>import java.util.ArrayList;
  import java.util.List;
  import java.util.Random;
  
  import org.json.JSONArray;
  import org.json.JSONException;
  import org.json.JSONObject;
  
  import android.annotation.SuppressLint;
  import android.app.Activity;
  import android.app.AlertDialog;
  import android.content.DialogInterface;
  import android.content.Intent;
  import android.os.Bundle;
  import android.util.Log;
  import android.view.Window;
  import android.widget.ImageView;
  import android.widget.Toast;
  
  import com.android.volley.Request.Method;
  import com.android.volley.Response;
  import com.android.volley.VolleyError;
  import com.android.volley.toolbox.JsonObjectRequest;
  import com.usd.amazingwallpapershd.app.AppConst;
  import com.usd.amazingwallpapershd.app.AppController;
  import com.usd.amazingwallpapershd.picasa.model.Category;
  
  @SuppressLint("NewApi")
  public class SplashActivity extends Activity {
      private static final String TAG = SplashActivity.class.getSimpleName();
      private static final String TAG_FEED = "feed", TAG_ENTRY = "entry",
              TAG_GPHOTO_ID = "gphoto$id", TAG_T = "$t",
              TAG_ALBUM_TITLE = "title";
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
          getActionBar().hide();
          setContentView(R.layout.activity_splash);
  
          // //splash images array
          // Randomise a background
          // int[] yourListOfImages = { R.drawable.splash_8, R.drawable.splash_8
          // };
          int[] yourListOfImages = { R.drawable.splash_1, R.drawable.splash_2,
                  R.drawable.splash_3, R.drawable.splash_4 };
  
          Random random = new Random(System.currentTimeMillis());
          int posOfImage = random.nextInt(yourListOfImages.length - 1);
  
          ImageView imageView = (ImageView) findViewById(R.id.splash_imageview);
          imageView.setBackgroundResource(yourListOfImages[posOfImage]);
          // //
  
          // //
  
          // Picasa request to get list of albums
          String url = AppConst.URL_PICASA_ALBUMS
                  .replace("_PICASA_USER_", AppController.getInstance()
                          .getPrefManger().getGoogleUserName());
  
          Log.d(TAG, "Albums request url: " + url);
  
          // Preparing volley's json object request
          JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET, url,
                  null, new Response.Listener&lt;JSONObject&gt;() {
  
                      @Override
                      public void onResponse(JSONObject response) {
                          Log.d(TAG, "Albums Response: " + response.toString());
                          List&lt;Category&gt; albums = new ArrayList&lt;Category&gt;();
                          try {
                              // Parsing the json response
                              JSONArray entry = response.getJSONObject(TAG_FEED)
                                      .getJSONArray(TAG_ENTRY);
  
                              // loop through albums nodes and add them to album
                              // list
                              for (int i = 0; i &lt; entry.length(); i++) {
                                  JSONObject albumObj = (JSONObject) entry.get(i);
                                  // album id
                                  String albumId = albumObj.getJSONObject(
                                          TAG_GPHOTO_ID).getString(TAG_T);
  
                                  // album title
                                  String albumTitle = albumObj.getJSONObject(
                                          TAG_ALBUM_TITLE).getString(TAG_T);
  
                                  Category album = new Category();
                                  album.setId(albumId);
                                  album.setTitle(albumTitle);
  
                                  // add album to list
                                  albums.add(album);
  
                                  Log.d(TAG, "Album Id: " + albumId
                                          + ", Album Title: " + albumTitle);
                              }
  
                              // Store albums in shared pref
                              AppController.getInstance().getPrefManger()
                                      .storeCategories(albums);
  
                              // String the main activity
                              Intent intent = new Intent(getApplicationContext(),
                                      MainActivity.class);
                              startActivity(intent);
                              // closing spalsh activity
                              finish();
  
                          } catch (JSONException e) {
                              e.printStackTrace();
                              Toast.makeText(getApplicationContext(),
                                      getString(R.string.msg_unknown_error),
                                      Toast.LENGTH_LONG).show();
                          }
  
                      }
                  }, new Response.ErrorListener() {
  
                      @SuppressWarnings("deprecation")
                      @Override
                      public void onErrorResponse(VolleyError error) {
                          Log.e(TAG, "Volley Error: " + error.getMessage());
  
                          // show error toast
                          Toast.makeText(getApplicationContext(),
                                  getString(R.string.splash_error),
                                  Toast.LENGTH_LONG).show();
  
                          // Unable to fetch albums
                          // check for existing Albums data in Shared Preferences
                          if (AppController.getInstance().getPrefManger()
                                  .getCategories() != null
                                  &amp;&amp; AppController.getInstance().getPrefManger()
                                          .getCategories().size() &gt; 0) {
                              // String the main activity
                              Intent intent = new Intent(getApplicationContext(),
                                      MainActivity.class);
                              startActivity(intent);
                              // closing spalsh activity
                              finish();
                          } else {
                              // Albums data not present in the shared preferences
                              // Launch settings activity, so that user can modify
                              // the settings
  
                              // Intent i = new Intent(SplashActivity.this,
                              // SettingsActivity.class);
                              // // clear all the activities
                              // i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                              // | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                              // startActivity(i);
  
                              AlertDialog alertDialog = new AlertDialog.Builder(
                                      SplashActivity.this).create();
                              alertDialog
                                      .setMessage("Please connect to the internet and try again");
                              alertDialog.setButton("OK",
                                      new DialogInterface.OnClickListener() {
                                          public void onClick(
                                                  DialogInterface dialog,
                                                  int which) {
                                              finish();
                                          }
                                      });
                              alertDialog.show();
  
                          }
  
                      }
                  });
  
          // disable the cache for this request, so that it always fetches updated
          // json
          jsonObjReq.setShouldCache(false);
  
          // Making the request
          AppController.getInstance().addToRequestQueue(jsonObjReq);
  
      }
  
  }
  </code></pre>
  
  <p><strong>and this is BlinkActivity code:</strong></p>
  
  <pre><code>import android.app.Activity;
  import android.os.Bundle;
  import android.view.animation.Animation;
  import android.view.animation.Animation.AnimationListener;
  import android.view.animation.AnimationUtils;
  import android.widget.ImageView;
  
  public class BlinkActivity extends Activity implements AnimationListener {
  
      ImageView img;
  
      // Animation
      Animation animBlink;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          // TODO Auto-generated method stub
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_splash);
  
          img = (ImageView) findViewById(R.id.splash_imageview);
  
          // load the animation
          animBlink = AnimationUtils.loadAnimation(getApplicationContext(),
                  R.anim.blink);
  
          // set animation listener
          animBlink.setAnimationListener(this);
  
          // start the animation
          img.startAnimation(animBlink);
  
      }
  
      @Override
      public void onAnimationEnd(Animation animation) {
          // Take any action after completing the animation
  
          // check for blink animation
          if (animation == animBlink) {
          }
  
      }
  
      @Override
      public void onAnimationRepeat(Animation animation) {
  
      }
  
      @Override
      public void onAnimationStart(Animation animation) {
  
      }
  
  }
  </code></pre>
  
  <p><strong>But I'm not understanding how do I implement both together to make it work?</strong></p>