我想通过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);
有什么建议吗?