Android 功能介绍
android.1.jpg
画图
- Android里面大部分的控件都会提供很多方法
- 这些方法只需要自己去重写 不需要自己调用
- 什么是Activity=就是一个界面
- 管理一个界面从创建到运行到运行结束整个过程/生命周期
生命周期:
- 配置界面:onCreate 这个方法是系统调用的
- 启动界面 start
- 重新启动 restart
- 唤醒界面 resume
- 暂停界面 pause
- 销毁界面 destory
- 运行过程
- 界面启动
- onCreat
- onStart
*onResume - 点击home 键 回到主界面
- onPause
- 通过后台 重新运行这个程序
- onRestart
- onStart
- onSume
- 使用返回健返回主界面
- onPause
- onDestory
@Override//创建界面 界面如何布局
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("onCreat");
}
@Override //界面启动展现出来了
protected void onStart() {
super.onStart();
System.out.println("onStart");
}
@Override//重新启动一个界面
protected void onRestart() {
super.onRestart();
System.out.println("onRestart");
}
@Override//恢复界面 后台->前台
protected void onResume() {
super.onResume();
System.out.println("onResume");
}
@Override//暂停界面 界面切换
protected void onPause() {
super.onPause();
System.out.println("onPause");
}
@Override//界面销毁
protected void onDestroy() {
super.onDestroy();
System.out.println(" onDestroy");
}
- 控件就是一个视图=看得到的都是视图
- 1.学习系统自带的控件 非常熟悉
- 系统自带的控件:TextView EditText Button TmageView ListView
- RecyleView ScroliView ViewPager ProgressBar Switch
- 2.高级阶段 :自定义
- 1.在已有的控件基础上加上自己的功能
- 2.自己画
使用两种方式界面布局
1,xml布局
2.使用Java代码创建
xml:解耦安卓推荐使用xml
什么时候需要用代码创建 什么时候用xml配置
如果添加的控件是静态的 (变化 的东西不多)选择xml配置
如果需要灵活地操控这个控件 悬着代码创建
默认一个activity对应一个xml文件
命名特点:activity_界面功能.xml
xml文件就是一个容器:可以放很多UI控件
布局:这么多控件该如何布局
1.约束布局 ConstraintLayout
2.线性布局LinearLayout 垂直 水平
3.相对布局:RelativeLayout
4.帧布局:FrameLayout
5.表格布局:TableLayout Gridlayout
6.绝对布局:AbsoluteLa
思路
使用透明色去替换原有图片的对应点的像素
立刻获取替换后的
xml布局
MainActivity
public class MainActivity extends AppCompatActivity {
ImageView forground;
Bitmap orgBitmap;
Bitmap copyBitmap;
Canvas canvas;
Paint paint;
Matrix matrix;
@Override//创建界面 界面如何布局
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
1.配置界面
2.找到容器里面的图片视图控件 forground
3.将需要操作的图片读取出来 orgBitmap
//配置界面
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);
4.操作这张图片 用透明色替代某个位置的颜色setPixel设置像素
4.1将需要操作的图复制copyBitmap
- 创建一个和原始图片相同环境的空位图
- 创建一个Canvas 画布-现实中的画板
- 创建一个画笔
- 创建一个矩阵 矩阵功能:旋转图片,平移,翻转
- 画一幅图
- 显示图片
//操作这张图片 用透明色替代某个位置的颜色setPixel设置像素
//不能操作原图 只能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,800);
// //平移
// matrix.setTranslate(100,100);
// //翻转
// matrix.setScale(-1f,1f);
// matrix.postTranslate(orgBitmap.getWidth(),0);
//画一幅图
canvas.drawBitmap(orgBitmap,matrix,paint);
//显示图片
forground.setImageBitmap(copyBitmap);
给前景图片添加touch事件
//给前景图片添加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();
for(int i=-8; i <8;i++)
{
for(int j=-8;j<8;j++)
{
copyBitmap.setPixel(x+i,j+y,Color.TRANSPARENT);
}
}
//替换x,y对应的像素
// copyBitmap.setPixel(x,y,Color.TRANSPARENT);
// canvas.drawBitmap(orgBitmap,new Matrix(),paint);
forground.setImageBitmap(copyBitmap);
}
return false;
}
});
}
activity_main.xml
- 使用帧布局
- 导入图片使用ImageView
- 空间的尺寸
- 父视图:
- 子视图:
- 将一个控件添加的一个容器中
- 控件就是这个容器的子视图
- 容器就是这个控件的父视图
- 1.match_parent 和父视图一样大
- 2.wrap_content 包裹内容 和控件的内容一样大
- 3.100dp 具体尺寸
- 一个控件就是一个类的具体对象
- ImageView:
- 属性:宽 高
- 方法:导入图片
- 程序或者某个UI模块都可以有自己的样式 style
- 可以在values.styles.xml中更改
- 通过添加id号可以唯一标识摸一个控件 或者 组件(容器)
- android :id=" @+id/fi_main"
<?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_height="match_parent"
android:layout_width="match_parent"
android:src="@drawable/bg"/>
<ImageView
android:id="@+id/iv_forground"
android:layout_height="match_parent"
android:layout_width="match_parent" />
</FrameLayout>
java布局
//通过代码来布置界面
//1.找一个容器 xxlayout
FrameLayout container = new FrameLayout(this);
//3.创建一个子视图
//创建ImageView显示图片
ImageView bgImageView = new ImageView(this);
//设置属性 颜色
bgImageView.setBackgroundColor(Color.GREEN);
//将颜色添加到容器里里面
container.addView(bgImageView, 200, 200);
//2.设置当前界面的内容视图为这个容器
setContentView(container);
感悟:今天学习的很快乐。东哥今天找的照片很给力,很有意思。期待明天的相见。