在背景淡化Android之后重定向到新页面

时间:2011-11-07 12:17:57

标签: android background fading

我希望我的应用在使用线程进入另一个页面之前先得到一张褪色的图片。下面是我使用的代码,它对我很有用。但是,它会在线程末尾的白页中停止。我该怎么做才能在没有点击任何内容的情况下进入下一个活动?或者在页面变为白色之后,我应该使用什么代码以便现在进入下一个活动?

package com.kfc;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.*;
import android.widget.FrameLayout;
import android.widget.LinearLayout;

public class Intro extends Activity {
    LinearLayout screen;
    Handler handler = new Handler();
    int i;
    Intent intent;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.introxml);

        screen = (LinearLayout) findViewById(R.id.myintro);

        (new Thread(){
            @Override
            public void run(){
                for(i=0; i<255; i++){
                    handler.post(new Runnable(){
                        public void run(){
                            screen.setBackgroundColor(Color.argb(255, i, i, i));
                        }
                    });
                    // next will pause the thread for some time
                    try{ sleep(10); }
                    catch(Exception e){ break; }
                }
                for(i=255; i>0; i--){
                    handler.post(new Runnable(){
                        public void run(){
                            screen.setBackgroundColor(Color.argb(255, i, i, i));
                        }
                    });
                    // next will pause the thread for some time
                    try{ sleep(10); }
                    catch(Exception e){ break; }
                }
                startActivity(new Intent(Intro.this,NewKFCActivity.class));
            }
        }).start();
    }
}

1 个答案:

答案 0 :(得分:1)

for循环退出后。添加代码以开始新活动。

startActivity(new Intent(Intro.this,NewACtivity.class));

你需要把它放在for循环之外。如果你把它放在start方法之后,它将在线程完成之前执行。您可能还需要使用Intro.this对'this变量'进行范围调整。另请记住将清单文件中的新活动添加为

<activity android:name=".NewActivity"/>

请使用此

screen = (FrameLayout) findViewById(R.id.layout);
(new Thread(){
    @Override
public void run(){
    for(i=0; i<255; i++){
        handler.post(new Runnable(){
            public void run(){
                screen.setBackgroundColor(Color.argb(255, i, i, i));
            }
        });
        // next will pause the thread for some time
        try{ sleep(100); }
           catch(Exception e){ break; }
        }
        startActivity(new Intent(TabTester.this,NewKFCActivity.class));
    }
}).start();

此指针应指向Intro活动对象。但是在线程内部,这将引用当前线程对象(我不确定它究竟指向什么)所以你需要使用'Intro.this'来限定它,这意味着'使用它指向Intro活动'

当您将setBackgroundColor用于同一视图时,您的背景图片将被覆盖。一种方法是使用布局,外部布局将具有背景图片,内部布局将是应用了setBackgroundColor的布局。 例如:                
     

您还需要更改代码

screen.setBackgroundColor(Color.argb(255, i, i, i));

screen.setBackgroundColor(Color.argb(120, i, i, i));

alpha值设置为255,表示不透明,不会显示背景图像。