我想将一些动画后的图像更改为第一张图像。我正在尝试使用此代码,但只有第二个图像正在动画。第一张图片没有显示。
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仍然是相同的第一个图像没有显示。 请让我知道我做了什么错误。提前谢谢:)
答案 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