我正在编写一个应用程序,其活动可以为终端用户提供两种格式的数据,使用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;
}
}
};
这段代码效果很好并且没有给我带来任何麻烦,我只是质疑这是否可以用更好的方式来完成,例如使用视图鳍状肢?如果是这样,我如何实现视图翻转器代码在这两个视图之间切换?
或者我应该为每个视图使用片段吗?任何帮助将不胜感激。
答案 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实例。
您可以在此处找到完整的代码:
<强>更新强> 必须进行一些调整才能使View Flipper与ListView一起使用。我发现了另一个问题,即通过次要编辑解决了同样的问题。请查看here。
答案 1 :(得分:1)
如果您只想切换两个视图,这种方法就足够了。但是,您可以使用视图寻呼机来实现此功能。如果您有多个视图,这样的方法特别有用,这样您就不会立即渲染它们并浪费内存。 ViewPager将管理何时创建和销毁视图。
在布局中定义
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
创建适配器
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;
}
}
设置适配器
ViewPager viewPager = findViewById(R.id.viewPager);
viewPager.setAdapter(new MyPagerAdapter());
现在点击按钮,您可以设置查看寻呼机的当前项目。
viewPager.setCurrentItem(position);