我的编程空间,编程开发者的网络收藏夹
学习永远不晚

android最全的动画讲解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

android最全的动画讲解

android的动画一共分为三种,view动画,帧动画,属性动画。

View动画

什么是view动画,动画的对象只能是view的动画叫做view动画。view动画一共分为四种:TranslateAnimation(平移),ScaleAnimation(缩放),RotateAnimation(旋转),AlphaAnimation(透明度)四种动画。还有一个 AnimationSet(组合动画),他们都继承Animation 类。要记得view动画是通过通过Convas相关设置得以实现,而不是改变view的属性的,所以会出现一个问题就是view平移了,点击事件却没有改变。

要切记一点所有动画的原点坐标都是相对于View的左上顶点

view动画的实现方式一共两种:动态代码和xml文件实现。建议使用xml使用,复用性强。

 xml中使用,必须创建xml文件,文件路径:res/anim/filename.xml

TranslateAnimation动画

代码实现:

如果没有指定fromXType的话,就是默认的 ABSOLUTE

 构造方法一共如上三种。

formXType:指定应如何解释fromXValue。一共有三种模式:

ABSOLUTE  //绝对值,单位是px
RELATIVE_TO_SELF //相对于自身,意思是fromXValue*自身的宽度
RELATIVE_TO_PARENT //相对于父类的,意思是fromXvalue*父类的宽度

常用的属性:

duration :动画持续时间,默认是0,马上的意思
fillAfter: 动画执行完毕后,是否保持结束位置
fillBefore:动画结束后,是否保持开始位置
repeatCount:动画重复,默认是1次,-1代表无效循环
repeatMode:动画重复模式 Animation.REVERSE (动画结束后,反向重复)  Animation.RESTART(每次都重新开始)
interpolator:动画的插值器,随时间改变,动画属性的改变百分比
reset:重置动画
setStartOffset:动画相对开始时间延迟多久开始,offset-偏移
setStartTime:设置动画执行的具体时间,单位为以毫秒为单位的开始时间。
cancel():动画停止,同时停止view动画,还可以使用it.clearAnimation(),区别在于,cancel是停止指定动画,clearAnimation()是停止于作用当前view的动画,他们都会回调onAnimationEnd方法。

xml实现:

首先在res中创建 anim文件夹, 

往上选择anim选项,名字只能是固定的anim 

创建完成后,右键,创建xml动画

创建slide_1.xml  

第一种写法:是animationSet的xml写法,如果这样写的话,会发现一个问题,就是在标签中就可以了。第二种写法:

在xml中没有formXType或者formYType这两个属性,那如何表示呢?

android:toYDelta="50"  没有修饰符的,代表ABSOLUTE ,单位是px

android:toYDelta="50%"  // %代表RELATIVE_TO_SELF

android:toYDelta="50%p"  // %p代表 RELATIVE_TO_PARENT

使用:

      val loadAnimation = AnimationUtils.loadAnimation(this, R.anim.slide_1)                it.startAnimation(loadAnimation)

设置监听:

     loadAnimation.setAnimationListener(object :AnimationListener{                override fun onAnimationStart(animation: Animation?) {                }                override fun onAnimationEnd(animation: Animation?) {                }                override fun onAnimationRepeat(animation: Animation?) {                }            })

ScaleAnimation动画

  代码实现:

 参数的解释:

fromX:从自身x轴长度多少倍开始缩放,(特别注意不是指缩放的px值)如:fromX= 0.5表示从自身X轴长度0.5倍开始缩放

tox:缩放到自身x轴长度多少倍结束,如:toX = 2.0表示x轴缩放到自身x轴长度2倍结束

formY:从自身Y轴长度多少倍开始缩放,如:fromY=0.5表示从自身Y轴长度0.5倍开始缩放

toY:缩放到自身Y轴长度多少倍结束,如:toY=2.0,表示y轴缩放到自身的y轴长度2倍结束。

pivot(中心点)

pivotX:相对于控制轴X的位置开始缩放

pivotY:相对于控制轴y的位置开始缩放

pivotXType:解释pivotx值的意义,默认是ABSOLUTE

pivotYType:解释pivoty值的意义,默认是ABSOLUTE

需要注意的 是,缩放的时候,是以pivotx,pivoty为中心点两边同时缩放的。

xml实现:

切记,不要在xml中添加float的修饰符 f,不然编译不过如:

RotateAnimation旋转动画

代码实现:

 formDegrees:从多少角度开始旋转

toDegrees:旋转到多少 度结束

pivotX:在X轴旋转中心位置

pivoty:在y轴旋转中心位置

pivotXtype:解释pivotx的意义,默认是ABSOLUTE

AlphaAnimation透明度动画

        源码的注解已经说明,透明度的值是0.0-1.0    public AlphaAnimation(float fromAlpha, float toAlpha) {        mFromAlpha = fromAlpha;        mToAlpha = toAlpha;    }

代码实现:

     val alphaAnimation = AlphaAnimation(1f, 0f).               apply {                   duration =500               }              it.startAnimation(alphaAnimation)

xml实现

anim->new->animaltion resource file ->

 这个时候发现好多代码写不出来,比如duration,这个时候可以在外层包一个set标签,把那个值复制过来,再删了标签。

AnimationSet组合动画

将多个动画组合使用

代码实现

通过AnimationSet的addAnimation方式执行。

val apply = AnimationSet(true).apply {    addAnimation(RotateAnimation(        0f, -90f, Animation.RELATIVE_TO_SELF, 0.5f,        Animation.RELATIVE_TO_SELF, 0.5f    ).apply {        duration = 300    })    addAnimation(AlphaAnimation(1.0f, 0.3f).apply {        duration = 300        startOffset = 300    })}it.startAnimation(apply)

xml中执行

    

如何实现一个view中一共有三个动画,一个动画结束完了,再执行另外一个动画呢?

属性动画有一个ordering属性,但是view动画是一起执行的,而且没有ordering属性。

那么我们可以通过

startOffset属性来执行。
            

layoutAnimation

layoutAnimation是作用于所有的ViewGroup,当为这个ViewGroup指定这个一个动画后,他子元素出场都具有这种动画效果。layoutAnimation不是指单独一种动画,而是一种手段。也可以看成view动画。

xml写法

在anim文件夹下创建 layoutAnimation类型文件。

lyanimation.xml

animation //引用的view动画animationOrder //子元素执行动画的顺序,有三种选项:normal、reverse和random,其中normal表示顺序显示,即排在前面的子元素先开始播放入场动画;reverse表示逆向显示,即排在后面的子元素先开始播放入场动画;random则是随机播放入场动画。delay //表示子元素开始动画的时间延迟,比如子元素入场动画的时间周期为300ms,那么0.5表示每个子元素都需要延迟150ms才能播放入场动画。总体来说,第一个子元素延迟150ms开始播放入场动画,第2个子元素延迟300ms开始播放入场动画,依次类推。

 slide_1.xml

ViewGroup中  android:layoutAnimation="@anim/lyanimation"引用。

                                     

代码中设置

注意这个是出场动画,假如这个viewGroup已经是可见的,你通过点击事件设置这个动画,是没有效果的

        val tv_click_12 = findViewById(R.id.tv_click_12);//获得viewGroup      val loadAnimation = AnimationUtils.loadAnimation(this, R.anim.slide_1) //加载view动画val LayoutAnimationController = LayoutAnimationController(loadAnimation).apply { //创建LayoutAnimationController delay = 0.5forder = LayoutAnimationController.ORDER_NORMAL            }            tv_click_12.layoutAnimation = LayoutAnimationController  //设置      

效果如图:

Activity的切换效果 

activity的跳转有默认的一个动画效果,但是 这个动画我们也可以自定义。主要通过

public void overridePendingTransition(int enterAnim, int exitAnim) {    ActivityClient.getInstance().overridePendingTransition(mToken, getPackageName(),            enterAnim, exitAnim);}

这个方法。这个方法必须在startActivity(intent)或者finish()之后调用才能生效。

enterAnim——Activity 被打开时,所需的动画资源 id exitAnim——Activity 被暂停时,所需的动画资源 id fragment的切换也可以设置动画,,由于Fragment是在API 11中新引入的类,因此为了兼 容性我们需要使用 support-v4 这个兼容包,在这种情况下我们可以通过 FragmentTransaction 中的 setCustomAnimations() 方法来添加切换动画。这个切换动画需要是 View 动画,之所以 不能采用属性动画是因为属性动画也是 API 11 新引入的。还有其他方式可以给 Activity Fragment 添加切换动画,但是它们大多都有兼容性问题,在低版本上无法使用,因此不具 有很高的使用价值,这里就不再一一介绍了。

帧动画

帧动画是按顺序播放一组预先定义好的图片,类似于 电影播放。不同于view动画,系统提供了一个AnimationDrawable类来使用帧动画,AnimationDrawable属于Drawable,所以直接在drawable文件夹中右键->new ->drawable resource file ->

创建xml文件

            

 设view设置 北京色

代码中使用:

      val mAnimationDrawable = findViewById(R.id.tv_click_11).background as AnimationDrawable            mAnimationDrawable.start()

就可以了。

属性动画

属性动画对View动画进行了扩展,他作用于任何对象,甚至可以没有对象。属性动画不仅仅限制于平移,缩放,旋转,和透明度这四种简单的变化。

属性动画有ValueAnimator,ObjectAnimator,AnimtorSet。这三种,通过他们可以实现复杂的动画。

了解属性动画之前需要了解俩个类:

interpolator 插值器,这个view 动画也有。TypeEvaluator 估值器

interpolator 的作用是指随着时间的流逝,计算当前属性值改变的百分比

android内置了几种插值器

LinearInterpolator(线性插值器:匀速动画)

AccelerateDecelerateInterpolator(加速减速插值器:动画两头慢中间快)

DecelerateInterpolator(减速插值器:动画越来越慢)

TypeEvaluator的作用是根据当前属性改变的百分比来计算改变后属性值,系统内置了

IntEvaluator(针对整形的属性)

FloatEvaluator(针对浮点型的属性) ArgbEvaluator(针对color类型的属性) 如果我们的属性动画针对(非int、 float Color )做动画,那么必须要自定义类型估值器 如何自定义估值器:
public class IntEvaluator implements TypeEvaluator {public Integer evaluate(float fraction,Integer startValue,IntegerendValue) {int startInt = startValue;return (int)(startInt + fraction * (endValue -startInt));}}

​​​​​​​

ObjectAnimator

objectAnimator是针对于对象的。objectAnimator是ValueAnimator的子类,ObjectAnimator一共有如下几个重要的方法。

ObjectAnimator.ofInt()  ObjectAnimator.ofFloat()ObjectAnimator.ofArgb()ObjectAnimator.ofObject()//android提供了int,float,argb等默认的估值器,如果使用ObjectAnimator.ofObject()则得自定义估值器。可以参考这篇文章Android动画学习(三):自定义属性动画 - 简书public static ObjectAnimator ofInt(Object target, String propertyName, int... values) {    ObjectAnimator anim = new ObjectAnimator(target, propertyName);    anim.setIntValues(values);    return anim;}

target:动画作用的对象

propertyName:要改变的属性名称,在执行动画的时候,会不停的去调用这个属性的set方法

int... value:属性值变化,是一个数组,比如:透明度,从0->1->0

因为属性动画的原理是按一定的速度去动态改变这个属性值,从而达到动画的效果,所以要设置一个属性动画必须满足两个条件:

如果给一个AB属性设置属性动画,则必须满足,这个属性有setAB方法,而且假如不设置起始值的话,那个则必须有getAB方法,属性动画会通过这个方法去获取初始值。

执行属性动画的属性值的改变必须在UI上体现出来,不然会没效果。

eg:如何用属性实现如下效果.

分析代码:左边的图片是展开收起的布局,我们可以让点击红色布局的时候,让左边图片的

marginLeft改变,从而达到这个效果。

根据属性动画必须满足的两个条件,我们知道左边ImageView是没有marginLeft这个属性的。那么针对这种不满足上面两个条件的属性执行动画怎么解决呢?官方给提供了如下解决方案:

  1. 给object提供一个包装类,用来包装原始对象,假如没有这个属性,就提供间接为其提供这个属性,并且提供get,set方法
  2. 使用ValueAnimator,监听动画的过程,自己实现属性的改变。

 动态代码:

xml:

                                                                                                
代码:
采用包装类的方式实现:

创建一个包装类:SlideWrapper

    class SlideWrapper(val mSlide: View) {        private var marginLeft :Int  //提供这个属性        get() {   //重新这个属性的get方法            return (mSlide.layoutParams as LinearLayout.LayoutParams).leftMargin        }        set(value) {  //重写这个属性的set方法,满足属性值的改变会体验在ui效果上                      val apply = (mSlide.layoutParams as LinearLayout.LayoutParams).apply {                leftMargin = value            }            mSlide.layoutParams = apply        }    }
var isExpand:Boolean = true  //定义一个字段记录展开和收起的状态 val slideView  = SlideWrapper(slide_s)findViewById(R.id.click_button).setOnClickListener {              it.isEnabled = false              if (isExpand){                  //这是属性动画                  ObjectAnimator.ofInt(slideView,"marginLeft",-400).apply {                      duration = 500                    addListener(object :AnimatorListener{                        override fun onAnimationStart(animation: Animator?) {                        }                        override fun onAnimationEnd(animation: Animator?) {it.isEnabled = trueisExpand = false                        }                        override fun onAnimationCancel(animation: Animator?) {                        }                        override fun onAnimationRepeat(animation: Animator?) {                        }                    })                      start()                  }              }  else{    ObjectAnimator.ofInt(slideView,"marginLeft",-400,0).apply {                      duration =500                      addListener(object:AnimatorListener{                          override fun onAnimationStart(animation: Animator?) {                          }                          override fun onAnimationEnd(animation: Animator?) {  it.isEnabled = true  isExpand = true                          }                          override fun onAnimationCancel(animation: Animator?) {                          }                          override fun onAnimationRepeat(animation: Animator?) {                          }                      })                      start()                  }              }        }
采用ValueAnimator监听动画的过程实现

ValueAnimator本身不作用于任何对象,也就是说直接使用他是没有任何效果的,他可以对一个值做动画,我们可以监听其动画过程,在动画过程中修改我们对象的属性值。这样也相当于给我们对象做了动画。

  slide_s = findViewById(R.id.slide_s)        findViewById(R.id.click_button).setOnClickListener {            it.isEnabled = false //防止动画没有执行完,触发点击事件            if (isOpen){                //执行关闭动画,我们监听从0到 -400的int值的变化                ValueAnimator.ofInt(0,-400).apply {                    duration = 500 //动画执行时间                    //监听动画的每一帧                    addUpdateListener(object :AnimatorUpdateListener{                        override fun onAnimationUpdate(animation: ValueAnimator) {val animatedValue = animation.animatedValue as Int //获得动画当前的值val apply = (slide_s.layoutParams as LinearLayout.LayoutParams).apply {    leftMargin = animatedValue}                      }                    })                    //监听动画的执行过程                    addListener(object :AnimatorListener{                        override fun onAnimationStart(animation: Animator?) {                        }                        override fun onAnimationEnd(animation: Animator?) {it.isEnabled =true                        }                        override fun onAnimationCancel(animation: Animator?) {                        }                        override fun onAnimationRepeat(animation: Animator?) {                        }                    })                    start()                }            }else{                //执行打开动画    ValueAnimator.ofInt(-400,0).apply {        duration =500        addUpdateListener(object :AnimatorUpdateListener{            override fun onAnimationUpdate(animation: ValueAnimator) {                val animatedValue = animation.animatedValue as Int //获得动画当前值                val apply = (slide_s.layoutParams as LinearLayout.LayoutParams).apply {                    leftMargin = animatedValue                }                         }        })        addListener(object :AnimatorListener{            override fun onAnimationStart(animation: Animator?) {            }            override fun onAnimationEnd(animation: Animator?) {                it.isEnabled =true            }            override fun onAnimationCancel(animation: Animator?) {            }            override fun onAnimationRepeat(animation: Animator?) {            }        })        start()    }            }        }

这里用到了AnimatorUpdateListener,这个监听比较特殊它会监听整个动画过程,动画是由许多帧组成的,每播放一帧,onAnimationUpdate就会被调用一次。

效果是一样的。

属性动画除了通过代码实现以外,还可以通过XML来定义。属性动画需要定义在

res/animator/ 目录下,它的语法如下所示。
属性动画的各种参数都比较好理解,在XML中可以定义ValueAnimator、ObjectAnimator以及AnimatorSet,其中标签对应AnimatorSet,标签对应ValueAnimator,而则对应ObjectAnimator。标签的android:ordering属性有两个可选值:“together”和“sequentially”,其中“together”表示动画集合中的子动画同时播放,“sequentially”则表示动画集合中的子动画按照前后顺序依次播放,android:ordering属性的默认值是“together”。对于标签的各个属性的含义,下面简单说明一下,对于标签这里就不再介绍了,因为它只是比少了一个android:propertyName属性而已,其他都是一样的。android:propertyName——表示属性动画的作用对象的属性的名称;android:duration——表示动画的时长;android:valueFrom——表示属性的起始值;android:valueTo——表示属性的结束值;android:startOffset——表示动画的延迟时间,当动画开始后,需要延迟多少毫秒才会真正播放此动画;android:repeatCount——表示动画的重复次数;android:repeatMode——表示动画的重复模式;android:valueType——表示android:propertyName所指定的属性的类型,有“intType”和“floatType”两个可选项,分别表示属性的类型为整型和浮点型。另外,如果android:propertyName所指定的属性表示的是颜色,那么不需要指定android:valueType,系统会自动对颜色类型的属性做处理。对于一个动画来说,有两个属性这里要特殊说明一下,一个是android:repeatCount,它表示动画循环的次数,默认值为0,其中-1表示无限循环;另一个是android:repeatMode,它表示动画循环的模式,有两个选项:“repeat”和“reverse”,分别表示连续重复和逆向重复。连续重复比较好理解,就是动画每次都重新开始播放,而逆向重复是指第一次播放完以后,第二次会倒着播放动画,第三次再重头开始播放动画,第四次再倒着播放动画,如此反复

 

来源地址:https://blog.csdn.net/xueyoubangbang/article/details/132109140

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

android最全的动画讲解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android动画之补间动画用法最全详解

本文目录补间动画概述和分类各类补间动画实现xml实现补间动画透明度动画-AlphaAnimation缩放动画-ScaleAnimation位移动画-TranslateAnimation旋转动画-RotateAnimation动画组合-Ani
2022-06-06

Android动画全篇系列(十二)——ViewPager滑动动画

文章目录一、前言二、实现1、参数的介绍2、实现三、ViewPager2四、小结 一、前言 ViewPager的作用很多,一般会结合Fragment来构成能左右滑动的视图结构。ViewPager还能够撸成一个Banner轮播图,只需要自定义一
2022-06-06

Android 动态权限最全解析

本文目录动态权限概述动态权限分类动态权限申请方法方法1:官方API提供的方法步骤1:检查是否有权限步骤2:申请权限步骤3:回调函数的处理完整代码方法2:RxPermission引入依赖声明权限申请单个权限申请多个权限方法3:AndPermi
2022-06-06

Android 动画之帧动画用法详解

本文目录帧动画概念帧动画实现方法1:xml实现帧动画第一步:导入帧动画素材第二步:创建帧动画文件第三步:布局文件和Activity方法2:用Java代码实现帧动画 帧动画概念 在Android中,帧动画的本质是把一组预先准备好的图片循环切换
2022-06-06

实例讲解Android中的AutoCompleteTextView自动补全组件

AutoCompleteTextView是一个具有自动补全功能的EditView,当用户输入数据后,AutoCompleteTextView就会将用户输入的数据与他自己的adapter中的数据对比,如果用户数据与adapter中的某条数据的
2022-06-06

Android App中使用SurfaceView制作多线程动画的实例讲解

1. SurfaceView的定义 通常情况程序的View和用户响应都是在同一个线程中处理的,这也是为什么处理长时间事件(例如访问网络)需要放到另外的线程中去(防止阻塞当前UI线程的操作和绘制)。但是在其他线程中却不能修改UI元素,例如用后
2022-06-06

Android帧动画、补间动画、属性动画用法详解

在安卓开发中,经常会使用到一些动画,那么在开发中,如何使用这些动画呢? 帧动画:不是针对View做出一些形状上的变化,而是用于播放一张张的图片,例如一些开机动画,类似于电影播放,使用的是AnimationDrawable来播放帧动画 res
2022-06-06

Docker启动安装nacos(详情讲解,全网最细)

前言 安装之前你需要准备一个mysql,当前安装方式是将数据持久化到数据库中的,这里的部署是单机模式 1、Docker 拉取镜像 docker pull nacos/nacos-server PS:这是拉取最新的nacos版本,如果需要拉取
2023-08-16

Android动画之逐帧动画(Frame Animation)实例详解

本文实例分析了Android动画之逐帧动画。分享给大家供大家参考,具体如下: 在开始实例讲解之前,先引用官方文档中的一段话: Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画。Frame动画可以被定
2022-06-06

Android动画之补间动画(Tween Animation)实例详解

本文实例讲述了Android动画之补间动画。分享给大家供大家参考,具体如下: 前面讲了《Android动画之逐帧动画(Frame Animation)》,今天就来详细讲解一下Tween动画的使用。 同样,在开始实例演示之前,先引用官方文档中
2022-06-06

Android Dialog 动画实例详解

Android Dialog 动画实例详解 动画描述: 动画与底部菜单一样出现和消失 制作过程: 1. 创建两个动画文件 window_in.xml:
2022-06-06

Android SpringAnimation弹性动画解析

也许你想在Android上实现这种反弹的动画效果。Android Support Library 25.3.0引入了Dynamic-animation增强动画,里面提供了几个类用于使动画呈现实现真实的物理效果。你会想,自己的动画里加上 Bo
2022-06-06

android 帧动画,补间动画,属性动画的简单总结

帧动画——FrameAnimation 将一系列图片有序播放,形成动画的效果。其本质是一个Drawable,是一系列图片的集合,本身可以当做一个图片一样使用 在Drawable文件夹下,创建animation-list为根节点的资源文件
2022-06-06

最新SpringCloud Stream消息驱动讲解

SpringCloudStream是一个构建消息驱动微服务的框架,通过SpringCloudStream连接消息中间件,以实现消息事件驱动,这篇文章主要介绍了SpringCloud Stream消息驱动,需要的朋友可以参考下
2022-11-13

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录