如何在同一个活动中使用ViewFlipper(或)ViewSwitcher和TextSwitcher ..?

时间:2012-02-19 20:10:58

标签: android android-layout android-widget android-view

我是Android开发者的初学者。我能够实现textSwitcher和ViewSwitcher,但是在一个活动中单独实现。我希望他们在同一个活动中运作。

此代码不会在IDE中出现错误,而是在模拟器中显示“强制关闭”。

导入后的代码和所有..

ViewFlipper vS1,vS2,vS3;
Button onep,twop,lose,win,help,settings,start,pick1,pick2;
int condn,total,max=5,min=1,rem;
TextSwitcher minte,maxte,select1,select2,coinsrem;

@Override

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // Animations

    Animation in = AnimationUtils.loadAnimation(this,
            android.R.anim.slide_in_left);
    Animation out = AnimationUtils.loadAnimation(this,
            android.R.anim.slide_out_right);

//  Text Views ----
    minte.findViewById(R.id.min);
    maxte.findViewById(R.id.max);

   minte.setFactory(new TextSwitcherFactory());
   maxte.setFactory(new TextSwitcherFactory());

   minte.setText("Hello");

     // switching Views ----

    vS1 =(ViewFlipper) findViewById(R.id.vs1);
    vS2 =(ViewFlipper) findViewById(R.id.vs2);
    vS3 =(ViewFlipper) findViewById(R.id.vs3);

    vS1.setInAnimation(in);
    vS1.setOutAnimation(out);
    vS2.setInAnimation(in);
    vS2.setOutAnimation(out);
    vS3.setInAnimation(in);
    vS3.setOutAnimation(out);

 // create RangeSeekBar as Integer range between 20 and 75
    RangeSeekBar<Integer> seekBar = new RangeSeekBar<Integer>(20, 75, getBaseContext());
    seekBar.setOnRangeSeekBarChangeListener(this);

    // add RangeSeekBar to pre-defined layout
    ViewGroup layout = (ViewGroup) findViewById(R.id.rangeseek);
    layout.addView(seekBar);

    //----buttons-------------------------

    win = (Button)findViewById(R.id.win);
    lose = (Button)findViewById(R.id.loses);

    win.setOnClickListener(this);
    lose.setOnClickListener(this);

    //----buttons end----------------------
    //---Animating the views---



}







@Override
public void rangeSeekBarValuesChanged(Integer minValue, Integer maxValue) {
    // TODO Auto-generated method stub

}







public void onClick(View v) {
    // TODO Auto-generated method stub
    switch(v.getId())
    {

    case R.id.win:
        condn = 1;
        vS2.showNext();

        break;
    case R.id.loses :
        condn =0;
        vS2.showNext();

        break;



    }
}

public class TextSwitcherFactory implements ViewSwitcher.ViewFactory{

    @Override
    public View makeView() {
        // TODO Auto-generated method stub
        TextView t = new TextView(LastActivity.this);
        t.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
        t.setTextSize(36);
        t.setTextColor(Color.argb(255, 255, 204, 51));
        return t;       }

}

2 个答案:

答案 0 :(得分:1)

minte.findViewById(R.id.min); 
maxte.findViewById(R.id.max);

没有意义......

你应该像以下一样初始化它们:

minte =(TextSwitcher) findViewById(R.id.min);

答案 1 :(得分:0)

从您的代码中,您似乎正在尝试初始化3个单独的ViewFlipper并在它们之间切换。这不是怎么做的。 ViewFlipper(或ViewSwitcher)是FrameLayout类的扩展。因此,它一次只显示1个子视图。

要修复代码,请仅定义一个ViewFlipper。在此下,定义要在其间切换的3个视图(即RelativeLayout,LinearLayout等)。

此外,看起来你也试图做一些动画。因此,您最终可能希望使用ViewAnimator类,它只是ViewFlipper的父类。

谷歌的一些教程。那里有一些好的。

我希望这有帮助!