Как мигать изображение в ImageView (Android)

Я работаю над обойным приложением, в котором я показываю изображение с ImageView в качестве заставки.

Теперь я хочу пометить ImageView изображение как заставку.

Это мой код заставки:

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 json object request
        JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET, url,
                null, new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d(TAG, "Albums Response: " + response.toString());
                        List<Category> albums = new ArrayList<Category>();
                        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 < 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
                                && AppController.getInstance().getPrefManger()
                                        .getCategories().size() > 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);

    }

}

, и это код BlinkActivity:

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) {

    }

}

Но я не понимаю, как мне реализовать оба вместе, чтобы заставить его работать?

Ответ 1

Следующий фрагмент кода будет мигать ImageView. Установите фон ImageView как прозрачный.

    Animation animation = new AlphaAnimation(1, 0); //to change visibility from visible to invisible 
    animation.setDuration(1000); //1 second duration for each animation cycle 
    animation.setInterpolator(new LinearInterpolator()); 
    animation.setRepeatCount(Animation.INFINITE); //repeating indefinitely 
    animation.setRepeatMode(Animation.REVERSE); //animation will start from end point once ended.
    imageButton.startAnimation(animation); //to start animation

Ответ 2

** Попробуйте этот код **

image = (ImageView) findViewById(R.id.image);
Animation animation = new AlphaAnimation((float) 0.5, 0); // Change alpha from fully visible to invisible
animation.setDuration(500); // duration - half a second
animation.setInterpolator(new LinearInterpolator()); // do not alter
                                                     // animation
                                                     // rate
animation.setRepeatCount(Animation.INFINITE); // Repeat animation
                                              // infinitely
animation.setRepeatMode(Animation.REVERSE); // Reverse animation at the
                                            // end so the button will
                                            // fade back in
image.startAnimation(animation);

Ответ 3

Если вы не хотите мигать фоном ImageView (только мигать исходное изображение) или вы просто не хотите писать какой-либо из этого кода самостоятельно - именно этого я и старался избежать - тогда у вас будет для создания пользовательского представления и его внутреннего использования.
Конечно, есть временное решение с родительским FrameLayout, но не создавайте больше иерархии, когда нет реальной необходимости. :)

В любом случае, я написал Blinker View потому что мне было нужно такое поведение, и вы можете использовать его здесь: https://github.com/milosmns/blinking-image-view

Счастливое кодирование!

Ответ 4

ImageView image_star_animation;

image_star_animation =  (ImageView) mView.findViewById(R.id.image_star_animation);


    private void blinkAnimation(){

        Animation animation = new AlphaAnimation(1, 0); //to change visibility from visible to invisible
        animation.setDuration(2000); //2 second duration for each animation cycle
        animation.setInterpolator(new LinearInterpolator());
        animation.setRepeatCount(Animation.INFINITE); //repeating indefinitely
        animation.setRepeatMode(Animation.REVERSE); //animation will start from end point once ended.
        image_star_animation.startAnimation(animation); // imageview.startAnimation()
    }



    private void gifAnimation() {
        AnimationDrawable animation = new AnimationDrawable();
        animation.addFrame(getResources().getDrawable(R.drawable.star_icon), 700);
        animation.addFrame(getResources().getDrawable(R.drawable.app_icon), 1500);
        animation.addFrame(getResources().getDrawable(R.drawable.win_icon), 3000);
        animation.setOneShot(false);

        image_star_animation.setImageDrawable(animation);
        animation.start();
    }