目的:
了解Android studio中各个程序目录的意义,知道Activity的生命周期及对应的接口调用,通过撕衣服小demo来了解安卓开发的一些基本知识。
知识与技术:
1.Android studio的目录介绍:
2.Activity的生命周期
Android里面的大部分的控件都会提供很多方法
* 这些方法只需要自己去重写 不需要自己主动调用
* 什么是Activity = 就是一个界面
* 管理一个界面从创建到运行到结束的整个过程 / 生命周期
* 配置界面 onCreate 这个方法是系统调用的
* 启动界面 start
* 重新启动 restart
* 唤醒界面 resume
* 暂停界面 pause
* 销毁界面 Destroy
对应接口的调用顺序
* 界面启动
* onCreate
* onStart
* onResume
*
* 点击home键 回到主界面
* onPause
*
* 通过后台 重新运行这个程序
* onRestart
* onStart
* onResume
*
* 使用返回键 返回到主界面
* onPause
* onDestroy
3.Xml界面布局
* 使用两种方式界面布局
* 1.xml配置
* 2.使用Java代码创建
*
* 默认一个Activity对应一个xml配置文件
* 命名特点:activity_界面功能.xml
* xml文件就是一个容器:可以放很多UI控件
* 布局:这么多控件该如何布局
* 1.约束布局 ConstraintLayout
* 2.线性布局 LinearLayout 垂直 水平
* 3.相对布局 RelativeLayout
* 4.帧布局 FrameLayout
* 5.表格布局 TableLayout GridLayout
* 6.绝对布局 AbsoluteLayout
Xml界面
Design为控件拖拽
Text为代码配置
在Android开发具体使用中,常用Text(代码配置)[安卓的拖拽功能不完善,不常用]
Xml添加控件
添加图片
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/bg" />
* 控件的尺寸
* 父视图:
* 子视图:
* 将一个控件添加到一个容器中,控件就是这个容器的子视图
* 容器就是这个控件的父视图
*
* 1.match_parent 和父视图一样大
* 2.wrap_parent 包裹大小 和控件的内容一样大
* 3.20dp 具体尺寸
* 使用Java代码来布局界面
* 通过添加id号可以唯一标识某一个控件 或者 组件(容器)
android:id="@+id/fl_main"
* xml:解耦 安卓推荐使用xml
* 什么时候需要用代码创建 什么时候使用xml配置
* 如果添加的控件是静态的(变化的东西不多) 选择xml配置
* 如果需要灵活地操作这个控件 选择代码创建
4.更改样式
更改主题样式
* 程序或者某个UI模块都可以有自己的样式style
* 可以在values.style.xml里面定义
* 不需要ActionBar
parent="Theme.AppCompat.Light.NoActionBar"
> <里面就是app的名称
Android Studio进行APP图标更改的两种方式参考链接
实际使用:
制作一个撕衣服的小demo
撕衣服demo实现的思路
使用透明色去替换原有图片的对应点的像素
立刻获取替换之后的图片 将图片显示在ImageView上
创建控件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:id="@+id/fl_main">
背景图片
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/bg" />
显示操作后的图片
<ImageView
android:id="@+id/iv_forground"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</FrameLayout>
MainActivity中配置界面
//配置界面
setContentView(R.layout.activity_main);
//找到容器里面的图片视图控件
//findViewById
forground = findViewById(R.id.iv_forground);
读取原图
//将需要操作的图片读取出来 Bitmap
//BitmapFactory 用于管理位图
//decodeResource 从工程的资源路径中去生成一张位图
//getResources() 获取工程的资源
//R.drawable.fr 访问资源路径下 drawable里面的一个文件名为fr的资源
orgBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.fr);
创建副本
//操作这张图片 用透明色去替换某个位置的颜色
//不能操作原图 只能copy一份
//创建一个和原始图片相同环境的空位图
copyBitmap = Bitmap.createBitmap(orgBitmap.getWidth(),orgBitmap.getHeight(),
orgBitmap.getConfig());
图片操作
//创建一个Canvas 画布-现实中的画板
canvas = new Canvas(copyBitmap);
//创建一个画笔
paint = new Paint();
//创建一个矩阵
Matrix matrix = new Matrix();
/**
//旋转图片
//matrix.setRotate(90,1120,540);
//平移
//matrix.setTranslate(100,0);
//翻转 set只作用一次 post作用多次
matrix.setScale(-1f,1f);
matrix.postTranslate(orgBitmap.getWidth(),0);*/
//画一幅图
canvas.drawBitmap(orgBitmap,matrix,paint);
//显示图片
forground.setImageBitmap(copyBitmap);
添加触摸事件
//给前景图片添加touch事件
//当有触摸事件发生 系统就会将这个事件接收并回调这个事件
forground.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, 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 = -15 ; i < 15 ; i++)
for (int j = -15; j < 15; j++) {
copyBitmap.setPixel(x+i,y+j,Color.TRANSPARENT);
}
forground.setImageBitmap(copyBitmap);
}
return true;
}
});
demo存在问题:
- 手画出屏幕 x,y超出图片尺寸越界就闪退
- 触摸点位置和划线位置不一致 图片尺寸和屏幕尺寸不匹配
- apk未签名,apk不能正常安装
心得感悟:
今天刚正式进入到了Android阶段,对如何添加图片,如何给app改名、改图标都有了一定的了解。撕衣服小demo虽然不是很健康但是还是挺有意思的。给我的感觉是不算特别难,但是需要熟知很多控件等的用法。还有就是生成的app上传后的apk无法正常安装,需要了解一下其如何给apk签名,然后就可以传给朋友show一下了。安卓阶段的确要有趣一些,要在好好学习安卓开发的同时,再抽出足够的时间去熟习之前C、Java的知识。