如何在同一个活动中使用 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 不能立即工作