[英]Image is not changing in ImageView
我想将一些动画后的图像更改为第一张图像。 我正在尝试使用此代码,但是只有第二张图像正在动画化。 第一张图像未显示。
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仍未显示第一张图片。 请让我知道我犯了什么错误。
您将需要使用动画侦听器来实现此目的:
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
}
});
希望这可以帮助。
您正在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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.