单击按钮时使用计时器更改 ImageView 中的图像
Change images in ImageView with timer when button is clicked
我想在带计时器(延迟 1 秒)的 ImageView 中更改 20 张图像。
有人能帮我吗?我尝试了 postdelayed runnable method 但我的 Activity 运行不正常(10 次点击中有 2 次崩溃)当我在 xml 文件中放入 17 张图片时(17 个 ImageViews)。每张图片的最大尺寸为 230kb。
有人可以帮我使用另一种方法吗?我的代码对于我使用 switch case 来说太长了。有人可以 post 您的任何代码示例吗?它真的有帮助。谢谢
E/AndroidRuntime: FATAL EXCEPTION: main
E/AndroidRuntime: Process: com.example.computer.mathkiddofinal, PID: 32031
E/AndroidRuntime: java.lang.RuntimeException:
Unable to start activity
ComponentInfo{com.example.computer.mathkiddofinal/com.example.computer.mathkiddofinal.grade_level.topics.gradeFour_PlaceValue}:
android.view.InflateException: Binary XML file line #25:
Error inflating class <unknown>
E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)
这是我的代码示例,大约有 20 个 ImageView。例如,我只 posted 2 ImageView。
public class gradeFour_PlaceValue extends Activity {
int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grade_four__place_value);
final Button btn = (Button) findViewById(R.id.button2);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
final ImageView[] images = {(ImageView) findViewById(R.id.im1),
(ImageView) findViewById(R.id.im2)};
v.postDelayed(new Runnable() {
@Override
public void run() {
images[count].setVisibility(View.VISIBLE);
switch (count){
case 0:
images[1].setVisibility(View.GONE);
break;
case 1:
images[0].setVisibility(View.GONE);
break;
...
我的xml布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/place1">
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start"
android:id="@+id/button2"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="179dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im1"
android:visibility="gone"
android:background="@drawable/place1"
android:layout_alignParentBottom="true" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im2"
android:visibility="gone"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place2" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im3"
android:visibility="gone"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place3" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im4"
android:visibility="gone"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place4" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/im5"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place5" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im6"
android:layout_alignBottom="@+id/im1"
android:visibility="gone"
android:layout_centerHorizontal="true"
android:background="@drawable/place6" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im7"
android:visibility="gone"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place7" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/im8"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place8" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/im9"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place9" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/im10"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place10" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/im11"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place11" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im12"
android:visibility="gone"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place12" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im13"
android:visibility="gone"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place13" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/im14"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place14" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im15"
android:visibility="gone"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place15" />
使用以下代码
Handler handler = new Handler();
Runnable runnable = new Runnable()
{
int i = 0;
public void run()
{
image1.setImageResource(imageArray[i]);
i++;
if (i > imageArray.length - 1)
{
i = 0;
}
Animation animationFadeIn = AnimationUtils.loadAnimation(DashBordActivity.this, R.anim.anim1);
image1.startAnimation(animationFadeIn);
handler.postDelayed(this, 3000); // for interval...
}
};
handler.postDelayed(runnable, 1000); // for initial delay..
在可绘制文件夹中创建一个名为 images_slideshow
的文件或任何您想要的文件:
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/image1" android:duration="1000" />
<item android:drawable="@drawable/image2" android:duration="1000" />
<item android:drawable="@drawable/image3" android:duration="1000" />
<item android:drawable="@drawable/image4" android:duration="1000" />
<item android:drawable="@drawable/image5" android:duration="1000" />
<item android:drawable="@drawable/image6" android:duration="1000" />
<item android:drawable="@drawable/image7" android:duration="1000" />
<item android:drawable="@drawable/image8" android:duration="1000" />
<item android:drawable="@drawable/image9" android:duration="1000" />
<item android:drawable="@drawable/image10" android:duration="1000" />
<item android:drawable="@drawable/image11" android:duration="1000" />
<item android:drawable="@drawable/image12" android:duration="1000" />
<item android:drawable="@drawable/image13" android:duration="1000" />
<item android:drawable="@drawable/image14" android:duration="1000" />
<item android:drawable="@drawable/image15" android:duration="1000" />
<item android:drawable="@drawable/image16" android:duration="1000" />
<item android:drawable="@drawable/image17" android:duration="1000" />
<item android:drawable="@drawable/image18" android:duration="1000" />
<item android:drawable="@drawable/image19" android:duration="1000" />
<item android:drawable="@drawable/image20" android:duration="1000" />
</animation-list>
这将每 1 秒随机播放一次 ImageView,您可以根据需要从每个图像的 android:duration
属性更改持续时间。通过将列表的 android:oneshot
属性设置为 true,它将只循环一次然后停止并停留在最后一帧。如果设置为 false 则动画将循环播放。
在onCreate()之前声明你的观点:
ImageView imageViews;
AnimationDrawable imagesAnimation;
在你的 onCreate() 中添加:
imageViews = (ImageView) findViewById(R.id.im1);
imageViews.setBackgroundResource(R.drawable.images_slideshow);
imagesAnimation = (AnimationDrawable) imageViews.getBackground();
imageViews.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (imagesAnimation.isRunning()) {
imagesAnimation.stop();
} else {
imagesAnimation.start();
}
}
return true;
}
});
您现在可以在 ImageView 的 Touch 上启动和暂停图像动画。你可以改变它的逻辑,比如通过按钮的 onClick 来启动和暂停它。
文档:AnimationDrawable | Android Developers
试一试。希望对您有所帮助。
您正在使用 Visibility.GONE
在 layout.xml (R.layout.activity_grade_four__place_value
) 和 Java 代码 (gradeFour_PlaceValue
) 中隐藏 ImageView。
我认为您应该在 xml 代码中使用 visibility="invisible"
并在 Java 代码中使用 images[n].setVisibility(View.INVISIBLE);
。
因为Visibility.GONE
表示视图不在布局中。所以你使用 RelativeLayout 作为父 ViewGroup,从第二个到最后一个 ImageViews 依赖于它们到第一个 ImageView (im1
),
的位置
android:layout_alignBottom="@+id/im1"
当第一个 ImageView 不存在时,他们无法确定自己的位置 (Visibility.GONE
)。
当您使用 Visibility.INVISIBLE
时,它们在布局中的存在并没有消失,只是它们的可见性变得不可见。
希望对您有所帮助。
我想在带计时器(延迟 1 秒)的 ImageView 中更改 20 张图像。 有人能帮我吗?我尝试了 postdelayed runnable method 但我的 Activity 运行不正常(10 次点击中有 2 次崩溃)当我在 xml 文件中放入 17 张图片时(17 个 ImageViews)。每张图片的最大尺寸为 230kb。 有人可以帮我使用另一种方法吗?我的代码对于我使用 switch case 来说太长了。有人可以 post 您的任何代码示例吗?它真的有帮助。谢谢
E/AndroidRuntime: FATAL EXCEPTION: main
E/AndroidRuntime: Process: com.example.computer.mathkiddofinal, PID: 32031
E/AndroidRuntime: java.lang.RuntimeException:
Unable to start activity
ComponentInfo{com.example.computer.mathkiddofinal/com.example.computer.mathkiddofinal.grade_level.topics.gradeFour_PlaceValue}:
android.view.InflateException: Binary XML file line #25:
Error inflating class <unknown>
E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)
这是我的代码示例,大约有 20 个 ImageView。例如,我只 posted 2 ImageView。
public class gradeFour_PlaceValue extends Activity {
int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grade_four__place_value);
final Button btn = (Button) findViewById(R.id.button2);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
final ImageView[] images = {(ImageView) findViewById(R.id.im1),
(ImageView) findViewById(R.id.im2)};
v.postDelayed(new Runnable() {
@Override
public void run() {
images[count].setVisibility(View.VISIBLE);
switch (count){
case 0:
images[1].setVisibility(View.GONE);
break;
case 1:
images[0].setVisibility(View.GONE);
break;
...
我的xml布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/place1">
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start"
android:id="@+id/button2"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="179dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im1"
android:visibility="gone"
android:background="@drawable/place1"
android:layout_alignParentBottom="true" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im2"
android:visibility="gone"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place2" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im3"
android:visibility="gone"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place3" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im4"
android:visibility="gone"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place4" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/im5"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place5" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im6"
android:layout_alignBottom="@+id/im1"
android:visibility="gone"
android:layout_centerHorizontal="true"
android:background="@drawable/place6" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im7"
android:visibility="gone"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place7" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/im8"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place8" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/im9"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place9" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/im10"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place10" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/im11"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place11" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im12"
android:visibility="gone"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place12" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im13"
android:visibility="gone"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place13" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/im14"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place14" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/im15"
android:visibility="gone"
android:layout_alignBottom="@+id/im1"
android:layout_centerHorizontal="true"
android:background="@drawable/place15" />
使用以下代码
Handler handler = new Handler();
Runnable runnable = new Runnable()
{
int i = 0;
public void run()
{
image1.setImageResource(imageArray[i]);
i++;
if (i > imageArray.length - 1)
{
i = 0;
}
Animation animationFadeIn = AnimationUtils.loadAnimation(DashBordActivity.this, R.anim.anim1);
image1.startAnimation(animationFadeIn);
handler.postDelayed(this, 3000); // for interval...
}
};
handler.postDelayed(runnable, 1000); // for initial delay..
在可绘制文件夹中创建一个名为 images_slideshow
的文件或任何您想要的文件:
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/image1" android:duration="1000" />
<item android:drawable="@drawable/image2" android:duration="1000" />
<item android:drawable="@drawable/image3" android:duration="1000" />
<item android:drawable="@drawable/image4" android:duration="1000" />
<item android:drawable="@drawable/image5" android:duration="1000" />
<item android:drawable="@drawable/image6" android:duration="1000" />
<item android:drawable="@drawable/image7" android:duration="1000" />
<item android:drawable="@drawable/image8" android:duration="1000" />
<item android:drawable="@drawable/image9" android:duration="1000" />
<item android:drawable="@drawable/image10" android:duration="1000" />
<item android:drawable="@drawable/image11" android:duration="1000" />
<item android:drawable="@drawable/image12" android:duration="1000" />
<item android:drawable="@drawable/image13" android:duration="1000" />
<item android:drawable="@drawable/image14" android:duration="1000" />
<item android:drawable="@drawable/image15" android:duration="1000" />
<item android:drawable="@drawable/image16" android:duration="1000" />
<item android:drawable="@drawable/image17" android:duration="1000" />
<item android:drawable="@drawable/image18" android:duration="1000" />
<item android:drawable="@drawable/image19" android:duration="1000" />
<item android:drawable="@drawable/image20" android:duration="1000" />
</animation-list>
这将每 1 秒随机播放一次 ImageView,您可以根据需要从每个图像的 android:duration
属性更改持续时间。通过将列表的 android:oneshot
属性设置为 true,它将只循环一次然后停止并停留在最后一帧。如果设置为 false 则动画将循环播放。
在onCreate()之前声明你的观点:
ImageView imageViews;
AnimationDrawable imagesAnimation;
在你的 onCreate() 中添加:
imageViews = (ImageView) findViewById(R.id.im1);
imageViews.setBackgroundResource(R.drawable.images_slideshow);
imagesAnimation = (AnimationDrawable) imageViews.getBackground();
imageViews.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (imagesAnimation.isRunning()) {
imagesAnimation.stop();
} else {
imagesAnimation.start();
}
}
return true;
}
});
您现在可以在 ImageView 的 Touch 上启动和暂停图像动画。你可以改变它的逻辑,比如通过按钮的 onClick 来启动和暂停它。
文档:AnimationDrawable | Android Developers
试一试。希望对您有所帮助。
您正在使用 Visibility.GONE
在 layout.xml (R.layout.activity_grade_four__place_value
) 和 Java 代码 (gradeFour_PlaceValue
) 中隐藏 ImageView。
我认为您应该在 xml 代码中使用 visibility="invisible"
并在 Java 代码中使用 images[n].setVisibility(View.INVISIBLE);
。
因为Visibility.GONE
表示视图不在布局中。所以你使用 RelativeLayout 作为父 ViewGroup,从第二个到最后一个 ImageViews 依赖于它们到第一个 ImageView (im1
),
android:layout_alignBottom="@+id/im1"
当第一个 ImageView 不存在时,他们无法确定自己的位置 (Visibility.GONE
)。
当您使用 Visibility.INVISIBLE
时,它们在布局中的存在并没有消失,只是它们的可见性变得不可见。
希望对您有所帮助。