安卓开发day1小程序初体验2019-08-25

目的:

初略了解和体验使用android studio编写安卓小程序,明白各个编辑区的功能事项,学习一些新的知识点,控件、界面布局、xml等待。

技术:

1.程序目录对应的功能:
image.png

2.界面及其生命周期:

什么是Activity? 就是一个界面
管理一个界面从创建到运行到结束的整个过程(生命周期):

过程 对应方法
配置界面 onCreate 这个方法是系统调用的(自己不要用)
启动界面 onStart
重新启动 onRestart
唤醒界面 onResume
暂停界面 onPause
销毁界面 onDestroy

对应接口的调用顺序:

 * 界面启动
 *    onCreate
 *    onStart
 *    onResume
 *
 * 点击home键 回到主界面
 *    onPause
 *
 * 通过后台 重新运行这个程序
 *    onRestart
 *    onStart
 *    onResume
 *
 * 使用返回键 返回到主界面
 *    onPause
 *    onDestroy

3.界面布局:

使用两种方法界面布局

  • 1.xml配置
  • 2.使用java代码创建

xml:解耦 安卓推荐使用 (关系不那么紧密)
什么时候需要用代码兴就 什么时候使用xml配置
如果添加到控件是静态的(变化的东西不多) 选择xml
如果需要灵活的操作这个控件 选择代码创建

使用java代码来布局界面

通过添加id号来唯一标识某一个控件 或者 组件
image.png
image.png

布局:这么多控件如何布局

布局选择 方法
1.约束布局 ConstraintLayout
2.线性布局 LinearLayout
3.相对布局 RelativeLayout
4.帧布局 FrameLayout
5.表格布局 TableLayout GridLayout
6.绝对布局 AbsoluteLayout

4.控件:

/**
 * 控件 = 一个视图 = 看得到的视图
 * 1.基础阶段:学习系统自带的控件 熟悉
 *   TextView EditText Button ImageView LIstView
 *   RecycleView ScrollView ViewPager ProgressBar
 * 2.高级阶段:自定义
 *   1.在已有的控件基础上加自己的功能 继承
 *   2.自己画

 * 控件的尺寸:
 * 父视图:
 * 子视图:
 * 将一个控件添加到一个容器中,控件就是容器的子视图
 * 容器就是控件的父视图
 * 1.match_parent 和父类一样大
 * 2.wrap_parent  包裹内容 和控件的内容一样大
 * 3.20dp         具体的尺寸

 * 一个控件就是一个类的具体属性
 * ImageView:
 *    属性
 *    方法
 */

5.程序或者某个UI模块都可以有自己的样式style 可以在values\styles.xml里面设置

image.png

6.通过代码发送来创建控件:

 public void code(){
        //通过代码来布局界面
        //1.找到一个容器 xxlayout
        FrameLayout contrainer = new FrameLayout(this);

        //3.创建一个子视图
        //创建ImageView显示图片
        ImageView backgroundImageView = new ImageView(this);
        //设置属性
        backgroundImageView.setBackgroundColor(Color.GREEN);
        //添加到容器里面
        contrainer.addView(backgroundImageView,200,200);

        //2.设置当前界面的内容视图为这个容器
        setContentView(contrainer);
    }

实际编写:

  • 使用透明色替换原有对应的像素
  • 立即获得替换后的图片 将图片显示在ImageView上
1.创建控件:
image.png
2.MainActivity中实现:
public class MainActivity extends AppCompatActivity {

    ImageView forground;
    Bitmap orgBitmap;
    Bitmap copyBitmap;
    Canvas canvas;
    Paint paint;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      
        //MainActivity中配置界⾯面

        //将需要操作1图片读取出来  Bitmap
     
        //创建副本

        //图片操作

        //给前景图片添加touch事件
      
        });

    }

MainActivity中配置界⾯面

  setContentView(R.layout.activity_main); //配置界面

        //找到容器里面的图片视图控件
        //findViewById
        forground = findViewById(R.id.iv_forground);

读取原图

       //将需要操作1图片读取出来  Bitmap
        //BitmapFactory 用于管理位图
        //decodeResource 从工程的资源路径中生成一张位图
        //getResources() 获取资源路径
        //R.drawable.b   访问资源路径下 drawable里面的一个文件
        orgBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.b);

创建副本

        //操作这张图片 用透明色去替换某个位置的颜色
        //不能操作原图  只能copy一份
        //参加一个和原始图片相同环境的空位图
        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(0.5f,0.5f);
//        matrix.setScale(-1f,1f);
//        matrix.postTranslate(orgBitmap.getWidth(),0);

        //画一幅图
        canvas.drawBitmap(orgBitmap,matrix,paint);

        //显示图片
        forground.setImageBitmap(copyBitmap);

添加触摸事件

  //当有触摸事件发生 系统就会将这个事件接收并返回这个事件
        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();

                    //替换x,y对应的像素
                    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;
            }
实际问题:

1.⼿手画出屏幕 x,y超出图⽚片尺⼨寸 越界就 闪退

  1. 触摸点位置和划线位置不不⼀一致 图⽚片尺⼨寸和屏幕尺⼨寸不不匹配

心得:

懵逼了一天,虽然东哥基本上把与今天讲的知识点相关的都讲了,但是我还是只懂那么一点,当编程时却不知道个所以然,只能默默跟着敲代码,哎,难受。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容