如何在android(Eclipse)中正确设置延迟

时间:2014-11-01 11:11:20

标签: android

我是日食和制作应用程序的新手,我想用3张图片创建无限循环,每张图片轮流转为可见或不可见。 但是当我运行应用程序时,只有第二张图片才会显示一次,然后就会停止并注意到。 我需要做些什么让它发挥作用?



protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
			
		dk1 =(ImageView) findViewById(R.id.dkmain1);
		dk2 =(ImageView) findViewById(R.id.dkmain2);
		dk3 =(ImageView) findViewById(R.id.dkmain3);
		dk1.setVisibility(View.VISIBLE);
	    dk2.setVisibility(View.INVISIBLE);
	    dk3.setVisibility(View.INVISIBLE);		
			
		 	if(dk1.getVisibility()==View.VISIBLE)
		 	{	 		
		 		 new Handler().postDelayed(new Runnable() {
			            @Override
			            public void run() {	              	
		            	dk1.setVisibility(View.INVISIBLE);
		    		    dk2.setVisibility(View.VISIBLE);
		    		    dk3.setVisibility(View.INVISIBLE);	           	
                         }
                     }, 2000);       	 			
		 	}
		 	if(dk2.getVisibility()==View.VISIBLE)
		 	{	
			 new Handler().postDelayed(new Runnable() {
		            @Override
		            public void run() {	                 	            	  
		                dk1.setVisibility(View.INVISIBLE);
		    			dk2.setVisibility(View.INVISIBLE);
		    			dk3.setVisibility(View.VISIBLE);			    		            	
		            }
		        }, 2000);
		 	}
		 	if(dk3.getVisibility()==View.VISIBLE)
		 	{	
			 new Handler().postDelayed(new Runnable() {
		            @Override
		            public void run() {		                           	
		                dk1.setVisibility(View.VISIBLE);
		    			dk2.setVisibility(View.INVISIBLE);
		    			dk3.setVisibility(View.INVISIBLE);  			    			            	
		            }
		        }, 3000);			
		 	}




2 个答案:

答案 0 :(得分:0)

如果您将视图设置为不可见:

dk2.setVisibility(View.INVISIBLE);

然后检查它是否可见:

if(dk2.getVisibility()==View.VISIBLE)

它将始终评估为false,永远不会被执行。

我会考虑一种不同的方法,例如:

此外,您可以使用以下方式在布局中设置默认可见性:

android:visibility="visible|invisible|gone"

答案 1 :(得分:-1)

您需要设置Handlers 嵌套以确保它们逐个运行:

    if(dk1.getVisibility()==View.VISIBLE)
                {           
                     new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {                 
                            dk1.setVisibility(View.INVISIBLE);
                            dk2.setVisibility(View.VISIBLE);
                            dk3.setVisibility(View.INVISIBLE);
                            //put your 2nd if here, and 3rd if INSIDE your 2nd if
                            if(dk2.getVisibility()==View.VISIBLE) 
                            //rest of the 2nd if code, and out the 3rd if here
                             }
                         }, 2000);