0.前言
从今天开始,我们正式进入Android知识的讲解
若想要了解有关Java的文章等其他主要知识,可以去看前面的文章
由于最终目的是要开发安卓app,
因此这里使用的IDE是AS(Android Studio)
(不会使用的可以参考下面这篇文章中的例子)
《[Java]开发安卓,你得掌握的Java知识2》
1.准备工作
在读本文前,你最好有以下准备:
- (1)安装Android Stuido(以下简称AS)
- (2)有一定的Java基础
- (3)有一台安卓机
(可以用模拟器来代替,包括AS自带的以及网上的一些著名模拟器)
2.基础知识讲解
AS中如何创建一个项目
(1)File-->New-->NewProject
(2)选择一个你想要的project类型,大家各取所需,本文用的是Empty Activity
(3)取好名字,选好存储project的位置,然后点击finish即可
app下面的每一个文件夹(或是文件)有什么用
文件夹 | 作用 |
---|---|
manifests的AndroidManifests.xml | 程序的清单文件/程序的配置文件 |
文件夹 | 作用 |
---|---|
java的MainActivity | 放各种java源代码 |
文件夹 | 作用 |
---|---|
res | 文件夹里面全是资源文件 |
res的drawable | 放图片资源 |
layout的activity_main.xml | 布局文件 |
文件夹 | 作用 |
---|---|
mipmap | 放应用图标的(就是app的图标) |
values | 各种细节,比如字体颜色、字符串、风格、尺寸等 |
关于一些基本的常见方法
我们打开java中的MainActivity
就会看到:
我们来讲解一下这个onCreate以及一些相关的方法
方法名 | 作用 |
---|---|
onCreate | 配置界面 |
onStart | 启动界面 |
onRestart | 重新启动 |
onResume | 唤醒界面 |
onPause | 暂停界面 |
onDestroy | 销毁界面 |
具体操作 | 操作用到的方法 |
---|---|
界面启动 | onCreate、onStart、onResume |
通过后台,重新运行这个程序 | onRestart、onStart、onResume |
使用返回键 返回主界面 | onPause、onDestory |
点击home键 回到主界面 | onPause |
onXxxx这一类方法,是系统在运行app的时候自动调用的方法,
不需要我们自己调用如果我们要在app运行的一些特定的时候,做一些特定的事情,那么就需要在对应的onXxxx方法中完成这些事情
关于布局
有两种方式可以实现界面布局:
实现方式 | 使用场合 |
---|---|
xml配置 | 用于静态文件(资源不用怎么变化) |
使用Java代码创建 | 用于资源需要进行许多变化的时候 |
xml进行配置:
java代码进行界面布局:
注意:Android开发更倾向于用xml文件配置
布局的种类:
(1)约束布局 ConstraintLayout
(2)线性布局 LinearLayout
(3)相对布局 RelativeLayout
(4)帧布局 FrameLayout 可以重叠
(5)表格布局 TabletLayout GridLayout
(6)绝对布局 AbsoluteLayout
3.实际例子
例子演示结果:
思路分析:
- 其实是两张图重叠
- 被划掉其实就是把划过的地方的像素变为透明像素
- 下面那张图是原图是不用操作的因此用ImageView控件
- 上面那张图需要被划开,因此是要多次变动的,要写java代码
我们需要先准备两幅图:
husus.jpg nusus.jpg
第一步.把这两张图复制粘贴到drawable下
图片资源的名字必须全部小写,否则必定报错
第二步.在layout的activity_main.xml中把布局方式改为帧布局
原因是:
使用这个布局,我们往里面添加控件的时候,会默认把他们放到这块区域的左上角
第三步.添加下方的图片(划开之后显示的图片)
用ImageView控件
- match_parent表示匹配父类,和父视图一样
- wrap_content包裹内容,内容多大,这个控件多大
- 宽高单位为dp,不是px
第四步.加入上方图片,并且要给id
<ImageView
android:id="@+id/iv_forground"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:srcCompat="@drawable/husus" />
其中@+id/表示给这个控件+id
格式:@+id/控件缩写_要做的事情
第五步.在Java的MainActivity的onCreate方法中做文章
//找到容器里面的图片视图控件
forground = findViewById(R.id.iv_forground);
//将需要操作的图片读取出来 Bitmap
//decodeResource 从工程的资源路径中去生成一张位图(在资源中找)
//前一个参数getResources()可以获取当前工程的Resources
// R.drawable.husus后面的参数就是找资源路径中的哪个资源
//读取出来原图
orgBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.husus);
//操作这张图片 用透明色去替换某个位置的颜色
//setPixel()设置位置点 setPixels()设置很多个
//不能(不允许)操作原图,得copy一份
//创建一个和原始图片相同环境的位图
copyBitmap = Bitmap.createBitmap(orgBitmap.getWidth(),orgBitmap.getHeight(),orgBitmap.getConfig());
//创建一个Canvas 画布-现实中的画板,构造方法的参数的意思是画在哪里
canvas = new Canvas(copyBitmap);
//创建一个画笔(划的过程就是画画的过程
paint = new Paint();
//创建一个矩阵,这个demo里其实矩阵没有发挥作用
matrix = new Matrix();
//画一幅图,第一个参数的意思:把那副图画上去;矩阵负责控制移动、旋转、翻转
canvas.drawBitmap(orgBitmap,matrix,paint);
//显示图片
forground.setImageBitmap(copyBitmap);
第六步.实现滑动事件onMove
//给前景图片的ImageView添加touch事件
forground.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
//每当有触摸事件发生,系统就会将这个事件接收,并且回调这个事件
//获取当前事件
//得到这个action对象,用action来记录一下,然后判断状态(是拖动、点下去、还是放开)
int action = motionEvent.getAction();
//判断状态
if (action == MotionEvent.ACTION_MOVE) {
//移动过程中,要替换触摸点的像素
//要获取触摸点的坐标
int x = (int)motionEvent.getX();
int y = (int)motionEvent.getY();
System.out.println("x:"+x+" y:"+y);
//替换操作图片的x,y对应的像素
//Color.TRANSPARENT就是透明色
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;
}
});
- forground.setOnTouchListener其实就是设置触摸事件的监听者,这样设置之后,当触发点击事件时,系统就会回调该方法
第五、六步都写在MainActivity里面
第七步.测试
将自己的手机或者是模拟器连接好后,点击上方的绿色按钮,选择对应的设备即可
4.总结
(1)今天是Android开发学习的第一天,由于很多内容之前并不熟悉,因此需要慢慢消化
(2)第一次写Android,可以很明显地感觉到,乐趣要优于单纯的java,而且总体来说也没有那么的难
(3)图片资源的名字必须全部小写,否则必定报错
(4)需要使用本地模拟器(而非AS自带模拟器的)可以参考其他文章
但是由于其他模拟器改变了一些操作,比如可能没法将程序放到后台
所以尽可能用自己的手机进行测试
网友评论