Android初体验
-
程序目录介绍
-
Activity的生命周期
-
对于接口的调用顺序
-
xml界面布局
- xml添加控件
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/bg"/>
- 使用java代码来布局界面
通过添加ID号可以唯一标识某一个控件 或者 组件(容器)
android:id="@+id/fl_main">
<ImageView
android:id="@+id/iv_forground"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
-
更改主题样式
parent="Theme.AppCompat.Light.NoActionBar">
程序或者某个UI模块都可以有自己的样式style
可以在value.style.xml里面定义
不需要ActionBar
- 代码方式创建控件
public void code(){
// 通过代码来布局界面
// 1.找一个容器 xxLayout
FrameLayout container = new FrameLayout(this);
// 3.创建一个子视图
// 创建ImageView显示图片
ImageView ivBackground = new ImageView(this);
// 设置属性
ivBackground.setBackgroundColor(Color.GREEN);
// 添加到容器里面
container.addView(ivBackground,container.getWidth(),container.getHeight());
// 2.设置当前这个界面的内容视图为这个容器
setContentView(container);
}
- 什么时候需要代码创建 什么时候使用xml配置
xml:解耦 安卓推荐使用
如果添加的控件是静态的(变化的东西不多) 选择xml配置
如果需要灵活的操作这个控件 选择代码创建 -
demo(撕衣服)
创建控件
MainActivity中配置界面
ImageView forground;
Bitmap orgBitmap;
Bitmap copyBitmap;
Canvas canvas;
Paint paint;
@Override // 创建一个界面 界面如何布局
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 配置界面
setContentView(R.layout.activity_main);
// 找到容器里面的图片视图控件
// findViewById
forground = findViewById(R.id.iv_forground);
读取原图
// 将需要操作的图片读取出来 Bitmap
// BitmapFactory 用于管理位图
// decodeResource 从工程的资源路径中去生成一张位图
// getResource() 获取工程的资源
// R.drawable.fr 访问资源路径下 drawable里面的一个文件名为fr的资源
orgBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.fr);
创建副本
// 操作这张图片 用透明色去替换某个位置的颜色
// 不能操作原图 只能拷贝一份
// 创建一个和原始图片相同环境的空位图
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(-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 motionEvent) {
// 获取当前事件
int action = motionEvent.getAction();
// 判断状态
if (action == MotionEvent.ACTION_MOVE){
// 获取触摸点的坐标
int x =(int)motionEvent.getX();
int y = (int)motionEvent.getY();
// 替换xy对应的像素
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;
}
});
效果