3

我正在编写一个应用程序,该应用程序的活动可以为最终用户提供两种格式的数据,一个使用 Teechart api 的条形图视图(可在此处获得:http: //www.steema.com/teechart/mobile)和一个 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;
    }
  }
};

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

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

4

2 回答 2

6

也许这对你有帮助: 视图之间的动画

它给出了一个通用的例子,也许你可以调整它以获得你想要的翻转效果。

更新: 该教程还提供了各种动画文档的链接。由此,我认为您可以使用旋转动画来创建翻转效果。您可以给出旋转角度和旋转视图所围绕的枢轴。

这个概念是您将一个视图向外旋转并在另一个视图中旋转。

更新:

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

View Flipper 的步骤:

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

2./res/anim一旦你在 XML 中创建了这么多,你就可以为以下类型的进入和退出转换创建四个动画规则:

一种。留在

湾。被排除在外

C。就在

d。马上出来

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

你可以在这里找到完整的代码:

1. 查看Flipper教程1

2. 查看Flipper教程2

更新: 必须进行一些调整才能使 View Flipper 与 ListView 一起使用。我发现了另一个 SO question,其中通过少量编辑解决了相同的问题。在这里查看。

于 2013-01-09T15:22:45.710 回答
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());
    

现在单击按钮,您可以设置视图寻呼机的当前项目。

    viewPager.setCurrentItem(position);
于 2013-01-09T15:39:00.987 回答