ANDROID中使用VIEWFLIPPER类实现屏幕切换(关于坐标轴的问题已补充更改)

ANDROID中使用VIEWFLIPPER类实现屏幕切换(关于坐标轴的问题已补充更改),第1张

概述屏幕切换指的是在同一个Activity内屏幕间的切换,ViewFlipper继承了Framelayout类,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果。如下动图:

屏幕切换指的是在同一个Activity内屏幕间的切换,VIEwFlipper继承了Framelayout类,VIEwAnimator类的作用是为FrameLayout里面的VIEw切换提供动画效果。如下动图:


该类有如下几个和动画相关的函数:

setInAnimation:设置VIEw进入屏幕时候使用的动画,该函数有两个版本,一个接受单个参数,类型为androID.vIEw.animation.Animation;一个接受两个参数,类型为Context和int,分别为Context对象和定义Animation的resourceID。 setoutAnimation: 设置VIEw退出屏幕时候使用的动画,参数setInAnimation函数一样。 showNext: 调用该函数来显示FrameLayout里面的下一个VIEw。 showPrevIoUs: 调用该函数来显示FrameLayout里面的上一个VIEw。

下面通过坐标轴的形式为大家演示动画实现方式:


由上图可知,以屏幕左下角为数学坐标轴的原点,屏幕下边框为X轴,左边框为Y轴,当前屏幕显示为图二,如果要看图一,则需要图一由左至右(相对屏幕而言)进入屏幕,图一X轴初始坐标为-100%p,移动到屏幕位置时图一X轴变为0(因为本次演示为横向滑动,所以不涉及Y轴);同理图三要进入屏幕,则需由右至左,X轴由100%p变为0.清楚了坐标位置,我们要实现四种动画效果,就会很简单,下面代码(需建立在res目录下自建的anim文件夹下)演示四种动画效果:

in_leftright.xml――从左到右进入屏幕:

<?xml version="1.0" enCoding="utf-8"?><set xmlns:androID="http://schemas.androID.com/apk/res/androID">  <translate    androID:duration="500"    androID:fromXDelta="-100%p"    androID:toXDelta="0"/></set>out_leftright.xml――从左到右出去屏幕:<?xml version="1.0" enCoding="utf-8"?><set xmlns:androID="http://schemas.androID.com/apk/res/androID">  <translate    androID:duration="500"    androID:fromXDelta="0"    androID:toXDelta="100%p"/></set>

in_rightleft.xml――从右到左进入屏幕:

<?xml version="1.0" enCoding="utf-8"?><set xmlns:androID="http://schemas.androID.com/apk/res/androID">  <translate    androID:duration="500"    androID:fromXDelta="100%p"    androID:toXDelta="0"/></set>

out_rightleft.xml――从右到左出去屏幕:

<?xml version="1.0" enCoding="utf-8"?><set xmlns:androID="http://schemas.androID.com/apk/res/androID">  <translate    androID:duration="500"    androID:fromXDelta="0"    androID:toXDelta="-100%p"/></set>

动画效果建立完成,建立

Layout中vIEw_layout.xml布局文件(本次直接将定义动画的三张图片直接通过linearLayOut布局到VIEwFlipper中):

<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"  androID:orIEntation="vertical" androID:layout_wIDth="match_parent"  androID:layout_height="match_parent">  <VIEwFlipper    androID:ID="@+ID/vf"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent">    <linearLayout      androID:layout_wIDth="match_parent"      androID:layout_height="match_parent">      <ImageVIEw        androID:layout_wIDth="match_parent"        androID:layout_height="match_parent"        androID:src="@mipmap/sample_1" />    </linearLayout>    <linearLayout      androID:layout_wIDth="match_parent"      androID:layout_height="match_parent">      <ImageVIEw        androID:layout_wIDth="match_parent"        androID:layout_height="match_parent"        androID:src="@mipmap/sample_2" />    </linearLayout>    <linearLayout      androID:layout_wIDth="match_parent"      androID:layout_height="match_parent">      <ImageVIEw        androID:layout_wIDth="match_parent"        androID:layout_height="match_parent"        androID:src="@mipmap/sample_3" />    </linearLayout>  </VIEwFlipper></linearLayout>

Activity中Java功能实现代码:

import androID.os.Bundle;import androID.support.annotation.Nullable;import androID.support.v7.app.AppCompatActivity;import androID.vIEw.MotionEvent;import androID.vIEw.VIEw;import androID.Widget.VIEwFlipper;/** * Created by panchengjia on 2016/11/28. */public class FlipperActivity extends AppCompatActivity implements VIEw.OntouchListener{  private VIEwFlipper vf;  float startX;//声明手指按下时X的坐标  float endX;//声明手指松开后X的坐标  @OverrIDe  protected voID onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.vIEwflipper_layout);    vf= (VIEwFlipper) findVIEwByID(R.ID.vf);    vf.setontouchListener(this);  }  @OverrIDe  public boolean ontouch(VIEw v,MotionEvent event) {    //判断捕捉到的动作为按下,则设置按下点的X坐标starX    if(event.getAction()==MotionEvent.ACTION_DOWN){      startX=event.getX();      //判断捕捉到的动作为抬起,则设置松开点X坐标endX    }else if(event.getAction()==MotionEvent.ACTION_UP){      endX=event.getX();      //由右到左滑动屏幕,X值会减小,图片由屏幕右侧进入屏幕      if(startX>endX){        //进出动画成对        vf.setInAnimation(this,R.anim.in_rightleft);        vf.setoutAnimation(this,R.anim.out_rightleft);        vf.showNext();//显示下个vIEw        //由左到右滑动屏幕,X值会增大,图片由屏幕左侧进入屏幕      }else if(startX<endX){        vf.setInAnimation(this,R.anim.in_leftright);        vf.setoutAnimation(this,R.anim.out_leftright);        vf.showPrevIoUs();//显示上个vIEw      }    }    return true;  }}

在练习这里时,动画的显示效果方式困扰了我好久,这才想到了通过坐标轴的形式体现动画实现原理,画成的那一瞬间,整个人顿似醍醐灌顶,忍不住想要写成博文分享给大家,共勉!

 后续更改补充:发文后,好友提醒在安卓开发中AndroID屏幕坐标系统,不同于一般数学模型,原点应该位于左上角且Y轴向下递增,经过查阅资料,确实如此,现更改坐标轴如下: 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的ANDROID中使用VIEWFLIPPER类实现屏幕切换(关于坐标轴的问题已补充更改)全部内容,希望文章能够帮你解决ANDROID中使用VIEWFLIPPER类实现屏幕切换(关于坐标轴的问题已补充更改)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1147603.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存