安卓初体验之xml界面布局
可以使用两种方式界面布局
1.xml配置
2.使用Java代码创建
其实也就是可以进行控件拖拽和代码配置xml,在xml里面可以添加控件,控件就相当于一个视图,而且使用Java代码来布局界面的时候,是通过添加id号可以唯一标识某一个控件或者组件 就是l例如android:id="@+id/fl_main"
这里我们说到代码方式创建控件,就是这种
public void code(){ //通过代码来布局界面
//1.找一个容器 xxlayout
FrameLayout container =new FrameLayout(this);
//2.设置当前这个界面的内容视图为这个容器
setContentView(container);
//3.创建一个子视图
ImageView bgImageView=new ImageView(this);
//设置属性
bgImageView.setBackgroundColor(Color.GREEN);
//添加到容器里面
container.addView(bgImageView,container.getWidth(),container.getHeight());
}
我们可以实现擦拭图片的功能 思路就是使用透明色去替换原来图片的对应点的像素 并立刻获取替换之后的图片 并显示在ImageView
在MainActivity中配置界面
public class MainActivity extends AppCompatActivity {
ImageView forground;
Bitmap copyBitmap;
Bitmap orgBitmap;
Canvas canvas;
Paint paint;
Matrix matrix;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//配置界面
setContentView(R.layout.activity_main);
forground=findViewById(R.id.iv_forground);
//将需要操作的图片读取出来 Bitmap
//用于管理位图 BitmapFactory
//descodeResource 从工程的资源路径中去生成一张位图
orgBitmap= BitmapFactory.decodeResource(getResources(),R.drawable.fr);
//操作这张图片 用透明色去替换某个位置的颜色
//不能操作原图 只能copy一份
copyBitmap=Bitmap.createBitmap(orgBitmap.getWidth(),orgBitmap.getHeight(),orgBitmap.getConfig());
//创建一个Canvas 画布-现实中的画板
canvas=new Canvas(copyBitmap);
//创建一个画笔
paint =new Paint();
//创建一个矩阵
matrix = new Matrix();
//旋转图片
//matrix.setRotate(90,240,400);
//平移
//matrix.setTranslate(100,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 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=-20;i<20;i++){
for(int j=-20;j<20;j++){
copyBitmap.setPixel(x+i,y+j,Color.TRANSPARENT);
}
}
//copyBitmap.setPixel(x,y,Color.TRANSPARENT);
//canvas.drawBitmap(orgBitmap,new Matrix(),paint);
forground.setImageBitmap(copyBitmap);
}
return true;
}
});
}
public void code(){ //通过代码来布局界面
//1.找一个容器 xxlayout
FrameLayout container =new FrameLayout(this);
//2.设置当前这个界面的内容视图为这个容器
setContentView(container);
//3.创建一个子视图
ImageView bgImageView=new ImageView(this);
//设置属性
bgImageView.setBackgroundColor(Color.GREEN);
//添加到容器里面
container.addView(bgImageView,container.getWidth(),container.getHeight());
}
}
在xml中创建控件
<?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_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/bg"
/>
<ImageView
android:id="@+id/iv_forground"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</FrameLayout>