Android开发初体验

1.程序目录介绍
程序目录介绍.png

2.Activity类

Activity是一个应用组件,用户可与其提供的屏幕进行交互。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。

一个应用通常由多个彼此松散联系的 Activity 组成。 一般会指定应用中的某个 Activity 为“主”Activity,即首次启动应用时呈现给用户的那个 Activity。

Android里面大部分的控件都会提供很多方法,这些方法只需要自己去重写,不需要自己调用。

Activity 实际就是一个界面,管理一个界面从创建,运行到结束的整个过程 / 生命周期。

2.1Activity的生命周期图
Activity的状态转换.png
2.2Activity生命周期的回调方法
  • onCreate()

这个方法是系统调用的,首次创建 Activity 时调用,始终后接 onStart()。

  • onStart()

在 Activity 即将对用户可见之前调用。
如果 Activity 转入前台,则后接 onResume(),如果 Activity 转入隐藏状态,则后接 onStop()。

  • onResume()

在 Activity 即将开始与用户进行交互之前调用。
此时,Activity 处于 Activity 堆栈的顶层,并具有用户输入焦点。始终后接 onPause()。

  • onPause()

当系统即将开始继续另一个 Activity 时调用。

此方法通常用于确认对持久性数据的未保存更改、停止动画以及其他可能消耗 CPU 的内容,诸如此类。

它应该非常迅速地执行所需操作,因为它返回后,下一个 Activity 才能继续执行。
如果 Activity 返回前台,则后接 onResume(),如果 Activity 转入对用户不可见状态,则后接onStop()。

  • onStop()

在 Activity 对用户不再可见时调用。
如果 Activity 被销毁,或另一个 Activity(一个现有 Activity 或新 Activity)继续执行并将其覆盖,就可能发生这种情况。
如果 Activity 恢复与用户的交互,则后接 onRestart(),如果 Activity 被销毁,则后接onDestroy()。

  • onDestroy()

在 Activity 被销毁前调用。这是 Activity 将收到的最后调用。

当 Activity 结束(有人对 Activity 调用了 finish()),或系统为节省空间而暂时销毁该 Activity 实例时,可能会调用它。 可以通过 isFinishing() 方法区分这两种情形。

  • onRestart()

在 Activity 已停止并即将再次启动前调用。始终后接 onStart()。

2.3Activity的这些方法在一些情况的调用
  • 界面启动:
    onCreate()
    onStart()
    onResume()

  • 点击home键,回到主界面:
    onPause()

  • 通过后台重新运行这个程序:
    onRestart()
    onStart()
    onResume()

  • 使用返回键,返回到主界面:
    onPause()
    onDestroy()

3.界面布局方式

3.1. xml配置

默认一个Activity对应一个xml配置文件。
xml配置文件命名特点:activity_界面功能.xml。
xml文件就是一个容器:可以放很多UI控件的容器。
当有很多控件时该如何布局?布局方法:
1.约束布局 ConstraintLayout
2.线性布局 LinearLayout 垂直 水平
3.相对布局 RelativeLayout
4.帧布局 FrameLayout
5.表格布局 TableLayout GridLayout
6.绝对布局 AbsoluteLayout

XML布局的常见属性
xml布局属性.png
3.2. 使用Java代码创建

通过代码来布局界面:
<1>.使用帧布局方式FrameLayout,在xml布局文件类里面将布局方式改为FrameLayout,并在容器资源里添加一个id号,以便通过id号找到这个容器资源

java代码布局.png

<2>.在app->java->MainActivity文件里面进行代码布局
1.找一个容器
2.创建一个子视图
3.设置当前这个界面的内容视图为这个容器
代码布局界面.png

3.3什么时候需要用代码创建?什么时候使用xml配置?

如果添加的控件是静态的(变化的东西不多),选择xml配置。xml布局控件间耦和性更低,布局更方便,安卓开发里面经常使用。

如果需要灵活地操作这个控件 ,选择代码创建。

4.控件

控件是指对数据和方法的封装。一个控件就是一个类的具体对象

控件可以有自己的属性方法,其中属性是控件数据的简单访问者,方法则是控件的一些简单而可见的功能、控件创建过程包括设计、开发、调试(就是所谓的3Ds开发流程,即Design、Develop、Debug)工作, 然后是控件的使用。

因为控件是可见的,一个控件就相当于一个视图。对控件的学习分为两个阶段:基础阶段和高级阶段。
基础阶段主要是学习系统自带的控件,对系统控件要比较熟悉运用,系统自带的控件有 TextView,EditText,Button,ImageView,ListView,RecycleView,ScrollView,ViewPager,ProgressBa,Switch等。
高级阶段主要是学习自定义控件。包括在已有的控件基础上加上自己的功能,学会自己自己画或者设置一个控件。

4.1父视图与子视图

将一个控件添加到一个容器中,控件就是这个容器的子视图,容器就是这个控件的父视图。

4.2控件的尺寸设置
  1. match_parent 和父视图一样大
  2. wrap_content 包裹内容,和控件的内容一样大
  3. 自己写一个具体尺寸,例如20dp。(dp为单位)
控件尺寸单位
  • dp (dip): 即设备无关像素(device independent pixels),这种尺寸单位在不同设备上的物理大小相同。
  • px:即像素(pixel)。
  • pt:通常用来作为字体的尺寸单位,1 pt相当于1/72英寸。
  • inch:英寸,1 英寸约等于2.54厘米,主要用来描述手机屏幕的大小。
  • sp:通常用作字体的尺寸单位,实际大小还与具体设备上的用户设定有关。

5.Demo:

使用图片布局,在图片上滑动可以改变图片像素。
1.创建两张图片视图的控件

在res->layout->activity_main.xml 的文件里面布局,其中图片放在res->drawable文件里面。

  //设置背景图片
<ImageView
        android:layout_width="match_parent"    
        android:layout_height="match_parent"
        android:src="@drawable/bg"/>

//设置前景图片
<ImageView
        android:id="@+id/iv_foreground"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

上面通过id号可以唯一标识某一个控件或者组件(容器):android:id="@+id/iv_foreground"

2. 下面在app->java->MainActivity文件里面配置界面,找到图片视图的控件:
 //配置界面
setContentView(R.layout.activity_main);

 //找到容器里面的图片视图控件
foreground = findViewById(R.id.iv_foreground);
3.读取原图,将需要操作的图片读取出来

decodeResource 从工程的资源路径中去生成一张位图
getResource() 获取工程的资源
R.drawable.fr 访问资源路径下 drawable里面的一个文件名为fr的图片

 //将需要操作的图片读取出来
 //decodeResource 从工程的资源路径中去生成一张位图
//getResource() 获取工程的资源
//R.drawable.fr 访问资源路径下 drawable里面的一个文件名为fr的图片
orgBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.fr);
4.创建副本

操作这张图片实际就是用透明色去替换某个位置的颜色,但是不能操作原图,只能copy一份,创建一个和原始图片相同环境的空位图。

//创建一个和原始图片相同环境的空位图
copyBitmap = Bitmap.createBitmap(orgBitmap.getWidth(),orgBitmap.getHeigh(),orgBitmap.getConfig());
5.对图片进行相应操作

创建一个Canvas 画布-现实中的画板:

//创建一个Canvas 画布-现实中的画板
canvas = new Canvas(copyBitmap);

创建一个画笔:

//创建一个画笔
paint = new Paint();

创建一个矩阵:

//创建一个矩阵
Matrix matrix = new Matrix();

画一幅图:

 //画一幅图
canvas.drawBitmap(orgBitmap,matrix,paint);

显示图片:

//显示图片
foreground.setImageBitmap(copyBitmap);
6.添加触摸事件

给前景图片添加touch事件,当有触摸事件发生,系统就会将这个事件接收并回调这个事件

foreground.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                //获取当前事件
                int action = event.getAction();

                //判断状态
                if (action == MotionEvent.ACTION_MOVE){
                    //获取触摸点的坐标
                    int x = (int) event.getX();
                    int y = (int) event.getY();

                    //替换x,y对应的像素
                    for (int i = -8; i < 8; i++) {
                        for (int j = -8; j < 8; j++) {
                            copyBitmap.setPixel(x+i,y+j,Color.TRANSPARENT);
                        }
                    }
                    foreground.setImageBitmap(copyBitmap);
                }
                return true;
            }
});
上面用到的一些属性定义为全局属性,放在onCreate()方法上面:
ImageView foreground;
Bitmap orgBitmap;
Bitmap copyBitmap;
Canvas canvas;
Paint paint;

通过这些步,这个demo的功能就可以实现了,接下来就可以运行看效果如何。

:上面创建一个矩阵,可以通过矩阵对图片进行旋转、平移、翻转等操作:
 //旋转图片
matrix.setRotate(90,240,400);
//平移
matrix.setTranslate(100,30);
 //翻转 set只作用一次 post作用多次
matrix.setScale(-1f,1f);
matrix.postTranslate(orgBitmap.getWidth(),0);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容