目的:
初略了解和体验使用android studio编写安卓小程序,明白各个编辑区的功能事项,学习一些新的知识点,控件、界面布局、xml等待。
技术:
1.程序目录对应的功能:
image.png
image.png
2.界面及其生命周期:
什么是Activity? 就是一个界面
管理一个界面从创建到运行到结束的整个过程(生命周期):
过程 | 对应方法 |
---|---|
配置界面 | onCreate 这个方法是系统调用的(自己不要用) |
启动界面 | onStart |
重新启动 | onRestart |
唤醒界面 | onResume |
暂停界面 | onPause |
销毁界面 | onDestroy |
对应接口的调用顺序:
* 界面启动
* onCreate
* onStart
* onResume
*
* 点击home键 回到主界面
* onPause
*
* 通过后台 重新运行这个程序
* onRestart
* onStart
* onResume
*
* 使用返回键 返回到主界面
* onPause
* onDestroy
3.界面布局:
使用两种方法界面布局
- 1.xml配置
- 2.使用java代码创建
xml:解耦 安卓推荐使用 (关系不那么紧密)
什么时候需要用代码兴就 什么时候使用xml配置
如果添加到控件是静态的(变化的东西不多) 选择xml
如果需要灵活的操作这个控件 选择代码创建
使用java代码来布局界面
image.png
image.png
布局:这么多控件如何布局
布局选择 | 方法 |
---|---|
1.约束布局 | ConstraintLayout |
2.线性布局 | LinearLayout |
3.相对布局 | RelativeLayout |
4.帧布局 | FrameLayout |
5.表格布局 | TableLayout GridLayout |
6.绝对布局 | AbsoluteLayout |
4.控件:
/**
* 控件 = 一个视图 = 看得到的视图
* 1.基础阶段:学习系统自带的控件 熟悉
* TextView EditText Button ImageView LIstView
* RecycleView ScrollView ViewPager ProgressBar
* 2.高级阶段:自定义
* 1.在已有的控件基础上加自己的功能 继承
* 2.自己画
* 控件的尺寸:
* 父视图:
* 子视图:
* 将一个控件添加到一个容器中,控件就是容器的子视图
* 容器就是控件的父视图
* 1.match_parent 和父类一样大
* 2.wrap_parent 包裹内容 和控件的内容一样大
* 3.20dp 具体的尺寸
* 一个控件就是一个类的具体属性
* ImageView:
* 属性
* 方法
*/
5.程序或者某个UI模块都可以有自己的样式style 可以在values\styles.xml里面设置
image.png
6.通过代码发送来创建控件:
public void code(){
//通过代码来布局界面
//1.找到一个容器 xxlayout
FrameLayout contrainer = new FrameLayout(this);
//3.创建一个子视图
//创建ImageView显示图片
ImageView backgroundImageView = new ImageView(this);
//设置属性
backgroundImageView.setBackgroundColor(Color.GREEN);
//添加到容器里面
contrainer.addView(backgroundImageView,200,200);
//2.设置当前界面的内容视图为这个容器
setContentView(contrainer);
}
实际编写:
- 使用透明色替换原有对应的像素
- 立即获得替换后的图片 将图片显示在ImageView上
1.创建控件:
image.png
2.MainActivity中实现:
public class MainActivity extends AppCompatActivity {
ImageView forground;
Bitmap orgBitmap;
Bitmap copyBitmap;
Canvas canvas;
Paint paint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//MainActivity中配置界⾯面
//将需要操作1图片读取出来 Bitmap
//创建副本
//图片操作
//给前景图片添加touch事件
});
}
MainActivity中配置界⾯面
setContentView(R.layout.activity_main); //配置界面
//找到容器里面的图片视图控件
//findViewById
forground = findViewById(R.id.iv_forground);
读取原图
//将需要操作1图片读取出来 Bitmap
//BitmapFactory 用于管理位图
//decodeResource 从工程的资源路径中生成一张位图
//getResources() 获取资源路径
//R.drawable.b 访问资源路径下 drawable里面的一个文件
orgBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.b);
创建副本
//操作这张图片 用透明色去替换某个位置的颜色
//不能操作原图 只能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,240,400);
//平移
//matrix.setTranslate(50,0);
//翻转 set只作用一次 post作用多次
//matrix.setScale(0.5f,0.5f);
// matrix.setScale(-1f,1f);
// matrix.postTranslate(orgBitmap.getWidth(),0);
//画一幅图
canvas.drawBitmap(orgBitmap,matrix,paint);
//显示图片
forground.setImageBitmap(copyBitmap);
添加触摸事件
//当有触摸事件发生 系统就会将这个事件接收并返回这个事件
forground.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
//获取当前事件
int action = motionEvent.getAction();
//判断状态
if(action == MotionEvent.ACTION_MOVE){
//获取触摸点的坐标
int x = (int)motionEvent.getX();
int y = (int)motionEvent.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);
}
}
//canvas.drawBitmap(orgBitmap,new Matrix(),paint);
forground.setImageBitmap(copyBitmap);
}
return true;
}
实际问题:
1.⼿手画出屏幕 x,y超出图⽚片尺⼨寸 越界就 闪退
- 触摸点位置和划线位置不不⼀一致 图⽚片尺⼨寸和屏幕尺⼨寸不不匹配
心得:
懵逼了一天,虽然东哥基本上把与今天讲的知识点相关的都讲了,但是我还是只懂那么一点,当编程时却不知道个所以然,只能默默跟着敲代码,哎,难受。