在Android中淡入/淡出动画

时间:2016-05-17 17:33:56

标签: android

我想通过AnimationListener从单独的线程对ImageView应用淡入/淡出效果。如果从主线程调用它,则下面的代码正在工作:

public static void setImage(final ImageView imageView, final int image)
{
    final Animation fadeIn = new AlphaAnimation(0, 1);
    fadeIn.setInterpolator(new DecelerateInterpolator());
    fadeIn.setDuration(2000);

    final Animation fadeOut = new AlphaAnimation(1, 0);
    fadeOut.setInterpolator(new AccelerateInterpolator());
    fadeOut.setDuration(2000);

    AnimationSet animation = new AnimationSet(false);
    animation.addAnimation(fadeOut);
    animation.setRepeatCount(1);
    imageView.setAnimation(animation);

    animation.setAnimationListener(new Animation.AnimationListener()
    {
        public void onAnimationEnd(Animation animation)
        {
            // TODO Auto-generated method stub
            imageView.setImageResource(image);
            imageView.startAnimation(fadeIn);
        }
        public void onAnimationRepeat(Animation animation)
        {
            // TODO Auto-generated method stub
        }
        public void onAnimationStart(Animation animation)
        {
            // TODO Auto-generated method stub
        }
    });
}

MainActivity中的某个地方:

protected void onCreate(Bundle savedInstanceState)
{
     ...
     Animator.setImage(imageView, R.drawable.ic_check_circle);
     ...
}

但是,如果在asynctask中执行它似乎无法正常工作:

private class JSONParse extends AsyncTask<String, String, JSONObject>
{
    private ProgressDialog pDialog;
    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
    }

    @Override
    protected JSONObject doInBackground(String... args)
    {
        JSONParser jParser = new JSONParser();

        JSONObject json = jParser.getJSONFromUrl(ins_url);
        return json;
    }

    @Override
    protected void onPostExecute(JSONObject json)
    {
        try
        {
            if( json.getString( "status" ).equals( "true" ) )
            {
                System.out.println("Ok!");
            //  Nothing happens when setImage method is invoked
                Animator.setImage(imageView, R.drawable.ic_check_circle);

            //  setImageResource works fine
            //  imageView.setImageResource(R.drawable.ic_check_circle);

            }

        }
        catch (JSONException e)
        {
            e.printStackTrace();
        }

    }
}

我提出了在主线程中运行它的想法,但未能使其工作:

Handler mainHandler = new Handler(getBaseContext().getMainLooper());
Runnable r = new Runnable()
{
     @Override
     public void run() {
          Animator.setImage(imageView, R.drawable.ic_check_circle);
     }
};
mainHandler.post(r);

有什么建议吗?

0 个答案:

没有答案
相关问题