成功开发Android app-7(多页面、添加事件、监听、动画)

本文详细介绍Android开发中多页面的实现方法,包括布局文件、Java文件创建及Activity继承,以及在AndroidManifest.xml中注册页面。同时,深入解析属性动画与视图动画的原理和实现方式,提供动画XML配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多页面

多页面我们通常采用注册来跳转

1.创建layout文件

前面说过了 ,我们先把页面都放在res/layout里,也就是创建的acticity的xml文件

2.创建java文件并创建class继承Activity

app/java文件夹下创建一个newpage1.java文件
继承Activity并重写onCreate方法


public class newpage1 extends Activity {
//重写onCreate() 方法,绑定layout页面
//new_activity 为创建在res/layout下的xml页面
@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_activity);
    }
    }

3.绑定activity

我们在AndroidMainfest.xml文件中进行新页面的注册(绑定)


<!-- 注册活动窗口 -->
<!-- activity绑定java (newpage1 就是创建在java文件夹下的newpage1.java)  -->
<activity android:name=".newpage1"></activity>

动画

什么是动画

动画:随着时间变化的图像(页面)

实际Android里有两种动画:

  1. Property Animation(属性动画)
  2. View Animation(视图动画)

属性动画

如何添加属性动画

一个动画定义在res/animator/filename.xml(filename将作为资源唯一的ID来使用)中在指定的时间来修改目标属性例如背景颜色

该xml动画文件中可能包含单独的<set><objectAnimator>或者 <animator>,也可以是<set>标签包裹<set><objectAnimator>或者 <animator>其中的一个或者多个。

<set>
属性变化的集合
包含<set><objectAnimator>或者 <valueAnimator>其中的一个或者多个。

<objectAnimator>
不能在动画xml文件中来设置要设置动画的对象。
只能通过setTarget() 提前设置和loadAnimator()加载
包含<animator>可以设置的所有属性

<animator>
简单地在指定的时间去执行一个动画。

基本语法

<set
  android:ordering=["together" | "sequentially"]>

    <objectAnimator
        android:propertyName="string"  
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["repeat" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <animator
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["repeat" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <set>
        <animator
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["repeat" | "reverse"]
        android:valueType=["intType" | "floatType"]/>
    </set>
</set>

android:ordering 指定动画的播放模式

  1. sequentially :循环播放
  2. together :同时播放(默认)

android:propertyName
string 类型
这个属性是必须要有的,它指定了要变化的对象的属性名
例如
“alpha”
“background”

android:duration
int 类型
指定动画持续的时间
单位为毫秒,默认是300毫秒,也就是3秒

android:valueFrom
int 类型、float 类型 或者是color 类型
这个属性不是必须要有的,指定了动画在属性值是多少的适合开始,如果不指定,默认是属性加载完成后就开始
color 类型是六位十六进制的数字来表示

android:valueTo
int 类型、float 类型 或者是color 类型
这个属性是必须要有的,
color 类型是六位十六进制的数字来表示

android:startOffset
int 类型
指定动画延迟时间,延迟后调用 start() 方法

android:repeatCount
int 类型
指定了动画的重复次数

  • -1 :无限重复
  • 0 :不重复
  • 正整数 :重复该正整数次

android:repeatMode
设置动画在循环结束时 下个动画开始的方式
android:repeatCount 的值要为-1或者正整数 ,android:repeatMode 才能生效

  • repeat : 动画从上次动画的正方向开始重复播放
  • reverse : 动画从上次动画的反方向开始重复播放

android:valueType
如果这个值为color 类型 不要指定这个属性, animation 自动处理 color类型
inttype :指定动画值是整数   
floatType(默认) :指定动画值是浮点数

视图动画

视图渐变动画,使用像动画的起点、终点、大小、旋转的数据等来让视图发生变化来形成动画。

两种视图动画框架

  1. 渐变动画 :一个单独的图像或者视图上通过执行一系列指定转换形成一个动画
  2. 帧动画 :通过显示一系列的图像来形成动画的效果

如何添加视图动画

我们可以在视图页面来定义动画,但是这是不被提倡的,官网文档提倡新建一个xml文档来防止动画所需的数据。

xml中定义了要发生的变换、何时发生以及应用这些变换所需的时间。转换可以是顺序的,也可以是同时的——例如,可以让文本视图的内容从左向右移动,然后旋转180度,或者可以同时移动和旋转文本。每个变换都会获取一组特定于该变换的参数(大小更改的起始大小和结束大小、旋转的起始角度和结束角度等等),以及一组公用参数(例如,开始时间和持续时间)。要使多个转换同时发生,请给它们相同的开始时间;要使它们连续,请计算开始时间加上前面转换的持续时间。

动画XML文件在Android项目的res/anim/目录中。
动画xml文件中可能包含单独的<alpha><scale><translate><rotate><set>,也可以是<set>标签包裹<alpha><scale><translate><rotate><set>其中的一个或者多个。
默认情况下,会同时应用所有动画,如果要按顺序发生,必须指定startOffset属性。

<alpha>
改变视图透明度,可以做到渐入渐出的效果

<scale>
改变视图的缩放比例,来对视图进行缩放

<translate>
改变视图的位置,来对视图进行平移

<rotate>
改变视图的角度,来对视图进行旋转

<set>
渐变动画的集合
包含<alpha><scale><translate><rotate><set>其中的一个或者多个。

基本语法

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>

android:interpolator
用于指定interpolator(插入器)资源,可以设置该属性会调用默认的interpolator(插入器)

android:shareInterpolator
boolean 类型
设置是否共享interpolator(插入器)资源

android:fromAlpha
float 类型
动画开始的不透明度
1.0 : 不透明
0.0 : 全透明
取0.0-1.0 其中的一个值,大小决定了透明程度,值越大不透明度越高,反之,值越小透明度越高

android:toAlpha
float 类型
动画结束的不透明度
1.0 : 不透明
0.0 : 全透明
取0.0-1.0 其中的一个值,大小决定了透明程度,值越大不透明度越高,反之,值越小透明度越高

android:fromXScale
float 类型
动画开始时X轴方向上的缩放比例

android:toXScale
float 类型
动画结束时X轴方向上的缩放比例

android:fromYScale
float 类型
动画开始时Y轴方向上的缩放比例

android:toYScale
float 类型
动画结束时Y轴方向上的缩放比例

android:pivotX
float 类型
沿着x轴缩放比例

android:pivotY
float 类型
沿着x轴缩放比例

android:fromXDelta
float 类型 或者 百分比
起始点X轴坐标,以原始的view 为基础 ,如果想以父元素的位置为基础在百分比的后面加上p 例如 “50%p”

android:toXDelta
float 类型 或者 百分比
结束点X轴坐标,以原始的view 为基础 ,如果想以父元素的位置为基础在百分比的后面加上p 例如 “50%p”

android:fromYDelta
float 类型 或者 百分比
起始点Y轴坐标,以原始的view 为基础 ,如果想以父元素的位置为基础在百分比的后面加上p 例如 “50%p”

android:toYDelta
float 类型 或者 百分比
结束点Y轴坐标,以原始的view 为基础 ,如果想以父元素的位置为基础在百分比的后面加上p 例如 “50%p”

android:fromDegrees
float 类型
初始的角度,正数代表顺时针,负数代表逆时针

android:toDegrees
float 类型
结束的角度,正数代表顺时针,负数代表逆时针

作为startAnimation() 的替代方法,可以使用setStartTime() :定义动画的开始时间,使用setAnimation() :将动画指定给视图视图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值