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

Posted

技术标签:

【中文标题】如何在同一个活动中使用 ViewFlipper(或)ViewSwitcher 和 TextSwitcher ..?【英文标题】:How to use ViewFlipper(or)ViewSwitcher and TextSwitcher in the same activity..? 【发布时间】:2012-03-10 07:14:33 【问题描述】:

我是 android dev 的初学者。我能够实现 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;       


【问题讨论】:

【参考方案1】:
minte.findViewById(R.id.min); 
maxte.findViewById(R.id.max);

没有意义……

你应该像这样初始化它们:

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

【讨论】:

【参考方案2】:

从您的代码看来,您正在尝试初始化 3 个单独的 ViewFlippers 并在它们之间切换。这不是如何做到这一点。 ViewFlipper(或 ViewSwitcher)是 FrameLayout 类的扩展。因此,它一次只会显示 1 个子视图。

要修复您的代码,只需定义一个 ViewFlipper。在此之下,定义您想要在其中切换的 3 个视图(即,RelativeLayout、LinearLayout 等)。

此外,您似乎也在尝试制作一些动画。因此,您最终可能希望改用 ViewAnimator 类,它只是 ViewFlipper 的父类。

谷歌一些教程。那里有一些不错的。

我希望这会有所帮助!

【讨论】:

以上是关于如何在同一个活动中使用 ViewFlipper(或)ViewSwitcher 和 TextSwitcher ..?的主要内容,如果未能解决你的问题,请参考以下文章

在 ViewFlipper 或 ViewPager 中滑动图像

带有 ViewFlipper 的 onTouchListener 不能立即工作

Android ViewFlipper + 手势检测器

Android中使用ViewFlipper实现屏幕切换

Android - 在 ViewFlipper 中的多个视图之间切换

Remoteview showNext() 和 showPrevious() 中的 ViewFlipper 不起作用