屏幕切换指的是在同一个Activity内屏幕间的切换,ViewFlipper继承了Framelayout类,ViewAnimator类的作用是为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布局html" target="_blank">文件(本次直接将定义动画的三张图片直接通过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动画切换屏幕效果的使用技巧和注意事项,需要的朋友参考一下 整个项目的 感悟:ViewFlipper貌似可以做成新下载的应用 ,用户第一次进入的大概描述。。最后再做个button,进入应用。 1.先在main.xml文件中添加viewflipper,然后在MainActivity
我们正在使用libgdx开发一款游戏,我们希望能够切换屏幕。我制作了一个GameOverScreen,它实现了Screen: 我的问题是我不知道如何在我的主课上设置屏幕。我看到的大多数示例都显示了一个扩展游戏的主类(com.badlogic.gdx.Game)。但我们的主类实现ApplicationListener,不扩展游戏: 因此,我不能使用来自Game类的setScreen方法。所以我如何能
我试图根据用户输入的坐标捕捉区域截图。基本上,用户在屏幕上点击得到x,y坐标,然后在其他地方点击另一对x,y坐标,然后将其放入一个矩形中,并使用机器人库创建屏幕截图。 我有的问题是,我得到了随机截图,这不是用户输入的坐标,我怎么能考虑包括0的坐标,因为矩形值必须超过1。 以下是我迄今为止的代码:
对于我的游戏,我需要在两个坐标系之间转换函数。这主要是一道数学题,但我需要的是C代码,以及一些解释如何解决我的问题。 屏幕坐标: a)左上角是0,0 b)无负值 c) 右=x(x值越大,右侧点越多) d) 底部=y 笛卡尔二维坐标: a) 中点为(0,0) b)减去值确实存在 c)右=x d)底部-=y(y越少,底部越点) 我需要一种简单的方法从一个系统转换到另一个系统,反之亦然。要做到这一点,(
在libGDX中切换屏幕似乎有问题。它会切换到游戏屏幕,但不会切换回主屏幕,也不会切换到屏幕上的游戏。我的游戏课: 我的GameScreen类(实现屏幕): 这就是我如何更改屏幕(不工作): 你可以在这里找到全部来源。
本文向大家介绍Android横竖屏幕切换小结,包括了Android横竖屏幕切换小结的使用技巧和注意事项,需要的朋友参考一下 Android手机或平板都会存在横竖屏切换的功能,通常是由物理重力感应触发的,但是有时候也不尽然,通常在设置里面我们可以对手机的横竖屏切换进行关闭。 AndroidManifest.xml activity_main.xml MainActivity.java 以上内容给大家