一、目的
1.进入到安卓开发的学习,先总览一下安卓开发,初步了解
2.学习各个目下面的东西的意义,用来做什么
二、知识点
1.界面了解
2.安卓的基本知识
Android里面大部分的控件都会提供很多方法 这些方法只需要自己重写 不需要自己主动调用
什么是Activity? 就是一个界面
管理一个界面从创建到运行到结束的整个过程(生命周期)
配置界面 onCreate 这个方法是系统调用的(自己不要用)
效果 | 方法 |
---|---|
启动界面 | onStart |
重新启动 | onRestart |
唤醒界面 | onResume |
暂停界面 | onPause |
销毁界面 | onDestroy |
具体操作 | 调用的方法 |
---|---|
1.界面启动 | onCreate、onStart、 onResume |
2.点击home键 回到主界面 | onPause |
3.通过后台 重新运行这个程序 | onRestart、 onStart、 onResume |
4.使用返回键 返回到主界面 | onPause |
3. 使用两种方式界面布局
1.xml配置
2.使用Java代码创建
(使用情况请参考第8条)
默认一个Activity对应一个xml配置文件
命名特点:activity_界面功能.xml
xml就是一个容器:可以放很多UI控件
种类 | 布局 | 特点 |
---|---|---|
1.约束布局 | ConstraintLayout | 用的较多 |
2.线性布局 | LinearLayout | 垂直或水平 |
3.相对布局 | RelativeLayout | 。 |
4.帧布局 | FrameLayout | 允许重叠 |
5.表格布局 | TableLayout | GridLayout |
6.绝对布局 | AbsoluteLayout |
4.控件
控件: 就是一个视图,看得到的东西
1.基础阶段:学习系统自带的控件 熟悉
TextView EditText Button ImageView ListView RecycleView ScrollView
ViewPager ProgressBar Switch
2.高级阶段:自定义
1.在已有的控件基础之上加上自己的功能 (就是继承)
2.自己画
5. 控件尺寸
(将一个控件添加到一个容器中,控件就是容器的子视图,容器就是控件的父视图)
1.match_parent :和父视图一样大
2.wrap_content: 包裹内容 和控件的内容一样大
3.20dp :具体尺寸
6.程序或某个UI模块更改样式:
1.在values下的styles.xml更改
e.g
不要工具条:
将<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
改为<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
2.写出来的application的风格(图标logo、名字……)
7.使用Java代码来布局界面
通过添加id可以唯一标识某一个控件 或者 组件(容器)
android:id="@+id/fl_main"
//1.找一个容器 xxlayout
FrameLayout container = new FrameLayout(this);
//2.设置当前这个界面的内容视图为这个容器
setContentView(container);
//3.创建一个子视图
//创建ImageView显示图片
//命名:ImageView ivBackground =
ImageView bgImageView = new ImageView(this);
//设置属性
bgImageView.setBackgroundColor(Color.BLUE);
//添加到容器里面
container.addView(bgImageView,container.getWidth(),container.getHeight());
}
8.布局方式的选择
xml:解耦 安卓中推荐使用xml
如果添加的控件是静态的 (变化的东西不多): 选择xml
如果需要灵活地操作这个控件 : ——选择代码
9.项目思路
ps:项目要求:达到触摸擦除现有图片显现被覆盖的内容
使用透明色去替换原有图片的对应的像素 不能写死
立刻获取替换之后的图片 将图片显示在ImageView上
三、实际应用
-
选取图片,一张作为底图,另一张作为表图
表图:a2
底图:
a1
- 将图片复制到drawable下(注意:此处两张图片的名字只能以英文字母开头,并且不能有一些符号,如:“-”,如果报错就按照要求来改)
-
xml文件内容
- .java文件下的代码
public class MainActivity extends AppCompatActivity {
Paint paint;
ImageView forground;
Bitmap copyBitmap;
Canvas canvas;
Matrix matrix;
Bitmap orgBitmap;
@Override//创建一个界面 并布局
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//配置界面
setContentView(R.layout.activity_main);
//找到容器里面的图片视图控件
//findViewById
forground = findViewById(R.id.iv_forground);
//将需要操作的图片读取出来 Bitmap
//BitmapFactory 用于管理位图
//decodeResource 从工程的资源路径去找到并生成一张位图
//getResources 获取工程的资源
//R.drawable.a2 访问资源路径下 drawable里面的一个名为a2的文件
orgBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.a2);
//操作这张图片:用透明色替换原颜色
//注意;不能操作原图 只能copy一份
//创建一个和原始图片相同环境的空位图
copyBitmap = Bitmap.createBitmap(orgBitmap.getWidth(),orgBitmap.getHeight(),orgBitmap.getConfig());
//创建一个canvas 画布(理解:现实中的画板)
canvas = new Canvas(copyBitmap);
//创建一个画笔
paint = new Paint();
//创建一个矩阵
matrix = new Matrix();
// //旋转图片
// matrix.setRotate(90,400,400);
//
// //平移 200:正方向走200像素 -400:负方向走400像素
// matrix.setTranslate(copyBitmap.getWidth()/2,0);
//
// //对坐标的设置
// //翻转 set 作用一次 post作用多次
// matrix.setScale(-1f,1f);
// matrix.postTranslate(copyBitmap.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 = -500;i<5000;i++) {
for (int j = -500; j < 5000; j++) {
copyBitmap.setPixel( x + i, y + j, Color.TRANSPARENT);
}
}
//显示图片
forground.setImageBitmap(copyBitmap);
}
return true;
}
});
}
}
四、心得:
一件重要事,即使它让人不解、让人疲惫不堪、有时候学的让人‘恶心’,也要去做,就当'负重前行'好了。
记得于果的一首歌里是这样
有风险才蜕变 时间总会说出再见