浏览Android之间的视图

时间:2013-01-09 15:17:06

标签: android android-fragments viewflipper

我正在编写一个应用程序,其活动可以为终端用户提供两种格式的数据,使用Teechart api(可在此处获取:http://www.steema.com/teechart/mobile)和在android中使用listview本地的条形图视图。目前我有一些像这样的逻辑

首先我初始化boolean flag = true;

然后我使用这个按钮逻辑来改变视图。

OnClickListener changeViewListener = new OnClickListener(){

  public void onClick(View v){
    if(!flag){
       listLayout.setVisibility(View.GONE);
       chartView.setVisibility(View.VISIBLE);
       changeView.setText("List");
       flag = true;
    }else{
       listLayout.setVisibility(View.VISIBLE);
       chartView.setVisibility(View.GONE);
       changeView.setText("Graph");
       flag = false;
    }
  }
};

这段代码效果很好并且没有给我带来任何麻烦,我只是质疑这是否可以用更好的方式来完成,例如使用视图鳍状肢?如果是这样,我如何实现视图翻转器代码在这两个视图之间切换?

或者我应该为每个视图使用片段吗?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:6)

也许这可能对你有所帮助: Animate between Views

它给出了一个通用示例,可​​能是您可以调整它以获得您想要的翻转效果。

<强>更新 该教程还提供了各种动画文档的链接。从那以后,我认为您可以使用Rotate Animation来创建翻转效果。您可以给出旋转角度和旋转视图的枢轴。

概念是您旋转一个视图 out 并在另一个视图中旋转

<强>更新

View Flipper是视图间动画的实现。我发布的上述方法是通用的,您可以玩弄值并创建动画,让您拥有更精细的控制。您可以在其他人可能从未尝试过的视图之间创建过渡。

View Flipper的步骤:

1。在View Flipper中,您可以在Layout XML文件中定义Flipper元素。对于这个鳍状肢元素,您可以添加两个子元素,它们可以只是两个视图或两个布局或一个视图和一个布局。 View Flipper在您定义的这两个视图之间翻转。

2。在XML中创建了这么多内容后,您可以在/res/anim下为以下类型的进入和退出转换创建四个动画规则:

a。留在

b。遗漏

c。正确

d。 Right Out

3. 在1和2之后,您现在可以在代码中添加Touch或Gesture侦听器,以侦听Touch和Listen事件。在这些侦听器中,您可以使用vf.setInAnimation()vf.setOutAnimation()启动动画,其中vf是您的ViewFlipper实例。

您可以在此处找到完整的代码:

1。 View Flipper Tutorial 1

2。 View Flipper Tutorial 2

<强>更新 必须进行一些调整才能使View Flipper与ListView一起使用。我发现了另一个问题,即通过次要编辑解决了同样的问题。请查看here

答案 1 :(得分:1)

如果您只想切换两个视图,这种方法就足够了。但是,您可以使用视图寻呼机来实现此功能。如果您有多个视图,这样的方法特别有用,这样您就不会立即渲染它们并浪费内存。 ViewPager将管理何时创建和销毁视图。

  1. 在布局中定义

    <android.support.v4.view.ViewPager
     android:id="@+id/viewPager"
     android:layout_width="match_parent"
     android:layout_height="match_parent" />
    
  2. 创建适配器

    class MyPagerAdapter extends PagerAdapter {
    
        public int getCount() {
            return 2;
        }
    
        public Object instantiateItem(View collection, int position) {
            LayoutInflater inflater = (LayoutInflater) collection.getContext().getSystemService(
                    Context.LAYOUT_INFLATER_SERVICE);
    
            // Inflate the correct view based on position
            View view = inflater.inflate(R.layout.yourLayoutHere, null);
    
            // ... Setup the view
    
            ((ViewPager) collection).addView(view, 0);
            return view;
        }
    
        @Override
        public void destroyItem(View arg0, int arg1, Object arg2) {
            ((ViewPager) arg0).removeView((View) arg2);
        }
    
        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == ((View) arg1);
        }
    
        @Override
        public Parcelable saveState() {
            return null;
        }
    }
    
  3. 设置适配器

    ViewPager viewPager = findViewById(R.id.viewPager);
    viewPager.setAdapter(new MyPagerAdapter());
    
  4. 现在点击按钮,您可以设置查看寻呼机的当前项目。

        viewPager.setCurrentItem(position);