ImageView中的图像没有变化

时间:2014-02-20 18:25:24

标签: java android

我想将一些动画后的图像更改为第一张图像。我正在尝试使用此代码,但只有第二个图像正在动画。第一张图片没有显示。

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);      
        anim(); 


    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

   public void anim() {
        Animation animfadein =AnimationUtils.loadAnimation(this,R.anim.fadein);
        Animation animfadeout =AnimationUtils.loadAnimation(this,R.anim.fadeout);
        findViewById(R.id.imageView1).startAnimation(animfadein);
        findViewById(R.id.imageView1).startAnimation(animfadeout);
        Context myActivity =getApplicationContext();
        Toast.makeText(myActivity, "Please wait", Toast.LENGTH_SHORT).show();
        button();
       }

    public void button() {
        ImageView imgView1 = (ImageView)findViewById(R.id.imageView1);          
        Drawable myDrawable = getResources().getDrawable(R.drawable.start);
        imgView1.setImageDrawable(myDrawable);
    }

}    

我的xml文件就像这样

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

   <ImageView

        android:id="@+id/imageView1"
        android:contentDescription="@string/description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"    
        android:src="@drawable/ic_logo"/>



</LinearLayout>

我尝试使用setImageresource仍然是相同的第一个图像没有显示。 请让我知道我做了什么错误。提前谢谢:)

2 个答案:

答案 0 :(得分:0)

您需要使用animation listener来实现此目标:

animFadeIn.setAnimationListener(new AnimationListener() {

    @Override
    public void onAnimationStart(Animation animation) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onAnimationRepeat(Animation animation) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onAnimationEnd(Animation animation) {
        //start animFadeOut Here
    }
});

希望这有帮助。

答案 1 :(得分:0)

您正在运行onCreate中的所有内容,这是在用户甚至无法看到任何UI之前完成的。直到onStart,用户才会看到UI。即便如此,变化几乎是即时的,所以你可能要等几秒钟。试试这个:

@Override
protected void onStart() {
    super.onStart();
    new Thread(new Runnable() {

        @Override
        public void run() {
            try {
                Thread.sleep(5000);
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        anim();
                    }
                });
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }).start();
}

一般来说,你制作一个线程等待5秒然后做动画。我不打算讨论什么是最好的方法,但你肯定需要在UI线程上修改它,所以我把它包含在代码片段中。
有关线程的更多信息,请访问:
http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html