Android 模仿iPhone列表数据View刷新动画详解_Android

 因为我本人很喜欢在不同的页面之间跳转时加点好玩的动画,今天无意间看到一个动画效果感觉不错,几种效果图如下:既然好玩就写在博客中,直接说就是:该效果类似于iPhone中View的切换动画效果,今天就只介绍上面展示的效果。

  废话不多说,先上效果,再看代码!!

  效果一:

  效果二:

  效果三:

  效果四:(犯错的效果):

  效果五(回旋效果一):

  效果六(回旋效果二):

  效果看完了,就来看下上面效果实现的具体代码吧, 中间会把我自己试验的、犯的错误都以注释的形式写下来的, 大家使用的时候别出错就行了!先来看下使用的布局文件,很简单的布局:

XML/HTML代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical" >
 <ListView
 android:id="@+id/firstPage"
 android:layout_width="fill_parent"
 android:layout_weight="1.0"
 android:layout_height="0dip"/>
 <ListView
 android:id="@+id/secondPage"
 android:layout_width="fill_parent"
 android:layout_weight="1.0"
 android:layout_height="0dip"
 android:visibility="gone"/>
 <Button
 android:id="@+id/startNext"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="@string/next" 

 /> 

</LinearLayout> 

XML/HTML代码

<strong> 下面再来看下实现以上效果的具体代码,代码中所标的顺序与上面显示的效果图一致:</strong>     

Java代码

package com.xiaoma.www; 

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.CycleInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import android.view.animation.OvershootInterpolator;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView; 

/**
* @Title: BetweenAnimationActivity.java
* @Package com.xiaoma.www
* @Description: 小马学习模仿iPhone列表分页旋转刷新
* @author XiaoMa
*/ 

public class BetweenAnimationActivity extends Activity implements OnClickListener { 

 /**资源声明*/
 private Button startNext = null ;
 private ListView firstPage = null ;
 private ListView secondPage = null ; 

 /**列表项声明*/
 private static final String firstItem[] =
 {"海阔人生","光辉岁月","无尽空虚","真的爱你","岁月无声","灰色轨迹","再见理想"}; 

 private static final String secondItem[] =
 {"洗唰唰","爱啦啦","喜欢你","娃哈哈","小马果","大坏蛋","冷雨夜"}; 

 /**列表页面切换动画插值器声明一*/
 private Interpolator accelerator = new AccelerateInterpolator();
 private Interpolator decelerator = new DecelerateInterpolator(); 

 /**动画插值器二:效果五与效果六都为以下插值器*/
 private Interpolator accelerator1= new CycleInterpolator(45f);
 private Interpolator decelerator1= new OvershootInterpolator(); 

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main); 

 /**
  * 这个地方写下,大家尽量不要在onCreate方法中写太多的操作,
  * 如果涉及到很多配置问题时有些属性设置必须在onCreate()方法中
  * 写,比如:全屏、横竖屏必须在setContentView()前面写,
  * 如果在onCreate()方法中写太多东西的,一句话:太乱!!
  * */ 

 init();
 } 

 /**
 * 初始化实现
 */
 private void init(){ 

 /**资源定位,添加监听*/
 startNext = (Button)findViewById(R.id.startNext);
 startNext.setOnClickListener(this); 

 firstPage = (ListView)findViewById(R.id.firstPage);
 secondPage = (ListView)findViewById(R.id.secondPage); 

 ArrayAdapter<String> firstAdapter = new ArrayAdapter<String>
  (this, android.R.layout.simple_list_item_1,firstItem);
 ArrayAdapter<String> secondAdapter = new ArrayAdapter<String>
  (this, android.R.layout.simple_list_item_1, secondItem); 

 firstPage.setAdapter(firstAdapter);
 secondPage.setAdapter(secondAdapter); 

 } 

 @Override
 public void onClick(View v) {
 changePage();
 } 

 //实现列表页面切换 

 private void changePage() { 

 final ListView visiable ;
 final ListView invisiable ; 

 if(firstPage.getVisibility() == View.GONE){
  visiable = secondPage ;
  invisiable = firstPage ;
 }else{
  visiable = firstPage ;
  invisiable = secondPage ;
 } 

//这个地方大家可能看到了ObjectAnimator这个类,一开始我也不知道是什么东西,很简单,查官方文档,官方文档中的解释一堆英文,我//一直说的,我英文烂的要死,但不怕,只要你想,就肯定可以查出来的,大家 只看一句:该类是 ValueAnimator的子类,可以根据给定//的属性名称给目标对象设置动画参数 

 //效果一(此处效果顺序与效果图一一对应)
 //final ObjectAnimator invisToVis = ObjectAnimator.ofFloat(invisiable, "rotationX",-90f, 0f);
 ObjectAnimator visToInvis = ObjectAnimator.ofFloat(visiable, "rotationX", 0f, 90f); 

 //效果二
 final ObjectAnimator invisToVis = ObjectAnimator.ofFloat(invisiable, "rotationY",-90f, 0f);
  ObjectAnimator visToInvis = ObjectAnimator.ofFloat(visiable, "rotationY", 0f, 90f); 

 //效果三(这个地方的alpha属性值大家只记一点:值越大越不透明就可以了!!!)
 //final ObjectAnimator invisToVis = ObjectAnimator.ofFloat(invisiable, "alpha", 0.0f, 1.0f );
 //ObjectAnimator visToInvis = ObjectAnimator.ofFloat(visiable, "alpha", 1.0f, 0.0f ); 

//效果四(此于是我犯的一个错误,很天真的以为应该也有rotationZ属性名称,其实是错的,在ofFloat参数中并无此属性名称,但大家还//是可以看到列表正常,其实显示 效果很不正常了因为后台已经报错,但应用仍然不会停止 ,照常运行,但效果仅仅是两个ListView直接//替换,并无任何动画添加到其中,这个地方大家注意下): ObjectAnimator.ofFloat(invisiable, "rotationZ",-90f, 0f); 

  visToInvis.setDuration(500);
  visToInvis.setInterpolator(accelerator);
  invisToVis.setDuration(500);
  invisToVis.setInterpolator(decelerator); 

//这个地方记录下,下面这个监听器小马第一次见到,查阅官方文档解释如下:此监听来监听动画的生命周期如:开始、结束、正在播放、循//环播放等 ,此处切记: Animation是不可以监听动画的,它只负责动画的
  visToInvis.addListener(new AnimatorListenerAdapter() {
  @Override
  public void onAnimationEnd(Animator anim) { 

   /*
   * 列举几个动画的监听:
   * 一:anim.isRunning(){//TODO}
   * 二:anim.isStarted(){//TODO}
   * 三:anim.end(){//TODO}
   */ 

   visiable.setVisibility(View.GONE);
   invisToVis.start();
   invisiable.setVisibility(View.VISIBLE);
  }
  });
  visToInvis.start();
 } 

}

  最后,再说下,文章标题中说是分页动画,其实这些动画并不仅仅局限于分页上面的,如果大家把插值器、动画用灵活一点的话, 也可以做出很个性的带有很多动画的应用的,再加上Activity之间的动画与以上这些结合的话就更完美了,Activity之间的动画大家可以参照我之前写的这篇文章(连接如下),希望对大家有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
刷新列表数据
模仿游戏剧情详解、洛卡纳哈刷新地点详解、ios 下拉刷新详解、recyclerview下拉刷新、recyclerview局部刷新,以便于您获取更多的相关知识。

时间: 2024-09-02 00:54:45

Android 模仿iPhone列表数据View刷新动画详解_Android的相关文章

Android编程之Animation动画详解_Android

本文实例讲述了Android编程之Animation动画用法.分享给大家供大家参考,具体如下: Animations 一.Animations介绍 Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转.缩放.淡入淡出等,这些效果可以应用在绝大多数的控件中. 二.Animations的分类 Animations从总体上可以分为两大类: 1.Tweened Animations:该类Animations提供了旋转.移动.伸展

Android开发高仿课程表的布局实例详解_Android

先说下这个demo,这是一个模仿课程表的布局文件,虽然我是个菜鸟,但我还是想留给学习的人一些例子,先看下效果   然后再来看一下我们学校的app 布局分析 先上一张划分好了的布局图 首先整个页面放在一个LinearLayout布局下面,分为上面和下面两个部分,下面一个是显示课程表的详细信息 1:这个没什么好讲的,就是直接一个LinearLayout布局,然后将控件一个TextView用来显示年份,一个View用来当作竖线,一个Spinner用来显示选择周数 2:这个是显示星期几的部件,是我自定义

Android开源项目PullToRefresh下拉刷新功能详解2_Android

先看看效果图: 这里介绍的是PullToRefreshGridView的使用方法,和之前的PullToRefreshListView方法如出一辙,因为这个开源项目模块化很棒,所以很容易实现.等于说我们可以按照之前使用控件的方式来操作,不用考虑其他的问题.  思路:  1.写布局文件,放入可以下拉刷新的控件  2.找到下拉刷新的控件,设置监听器,并且在刷新方法中开启一个异步任务来操作  3.通过这个下拉刷新控件的getRefreshableView()方法来得到GridView对象,按照正常的操作

Android开发之数据的存储方式详解_Android

在Android中,数据的存储分为两种方式: 1.直接以文件的形式存储在目录中 2.以json格式存储在数据库中 将数据以文件的存储又分为两种方式: 1.生成.txt文件 2.生成xml文件 那么今天就来详细的说一下以文件的形式存储,由于没有讲到数据库,在之后的课程中会讲到json格式存储在数据库中. 一.生成.txt文件 文件的生成无非就是我们Java中学习的输入输出流中的一部分,有Java基础相信都是很容易理解的,因为它真的很简单啦~~ 1.生成目录可以分为两种: 1)本机 2)SD卡 2.

Android中自定义一个View的方法详解_Android

本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到一些坑,我把自己遇到的一些问题和解决方法总结一下,希望对广大码友们有所帮助. 注意点① 用xml定义Layout时,Root element 最好使用merge 当我们需要继承一个布局比较复杂的ViewGroup(比较多的是LinearLayout.RelativeLayout)时,通常会用xml来

Android开发之自定义View(视图)用法详解_Android

本文实例讲述了Android开发之自定义View(视图)用法.分享给大家供大家参考,具体如下: View类是Android的一个超类,这个类几乎包含了所有的屏幕类型.每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展.在游戏开发中往往需要自定义视图(View),这个画布的功能更能满足我们在游戏开发中的需要.在Android中,任何一个View类都只需重写onDraw 方法来实现界面显示,自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式等. 为了实现自定义View,需要创建

Android自定义控件eBook实现翻书效果实例详解_Android

本文实例讲述了Android自定义控件eBook实现翻书效果的方法.分享给大家供大家参考,具体如下: 效果图: Book.java文件: package com.book; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ImageView; public class Book extend

Android中AlertDialog各种对话框的用法实例详解_Android

 目标效果: 程序运行,显示图一的几个按钮,点击按钮分别显示图二到图六的对话框,点击对话框的某一项或者按钮,也会显示相应的吐司输出. 1.activity_main.xml页面存放五个按钮. activity_main.xml页面: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools

Android实现有道辞典查询功能实例详解_Android

本文实例讲述了Android实现有道辞典查询功能的方法.分享给大家供大家参考,具体如下: 这是我做的一个简单的有道Android的DEMO,只是简单的雏形.界面设计也有点丑陋呵呵~ 看看下面的效果图: 第一步:思路解析 从界面看一共用了三个控件EditText,Button,WebView.其实是四个,是当我们查询内容为空的时候用来提示的Toast控件. 我们在EditText输入查询内容,这里包括中文,英文.然后通过参数的形式,从http://dict.youdao.com/m取出数据把结果