我想用定时器(1秒延迟)更改ImageView内的20个图像。 有人能帮我吗?我尝试了 postdelayed runnable方法,但是当我在我的xml文件(17个ImageViews)中放入17个图像时,我的活动运行不正常(在10次点击中获得2次压缩)。每张图片的最大尺寸为230kb。 有人可以帮我使用其他方法吗?我的代码太长了,我使用switch case。有人可以发布你的代码的任何样本,这将真的有帮助。感谢。
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。我只发布了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" />
答案 0 :(得分:2)
使用以下代码
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..
答案 1 :(得分:1)
在您的drawable文件夹中创建名为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的onTouch上启动和暂停图像动画。您可以通过点击按钮来更改其逻辑,例如启动和暂停。
文档:AnimationDrawable | Android Developers
试一试。希望有所帮助。
答案 2 :(得分:0)
您正在使用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
时,它们在布局中的存在并没有消失,只是它们的可见性变得不可见。
我希望它有所帮助。