Android开发,简单涉及

今天是正式进入Android开发的第一天,只是简单地来做了一个小Demo,通过对它的敲写来慢慢的打开进入Android开发的大门和学习开发中的一些知识点。

目的:
  • 敲写一个小Demo了解安卓开发的一些知识点
技术:
  • xml文件的运用
  • 资源文件和 Activity
实际的敲写:
  • 资源介绍和Activity生命周期
    首先,我们打开Android studio新建一个工程。建好后,在我们的Android studio左边出现了一栏的目录。我们先来介绍一下它们,及它们的作用。


    40.PNG
  • manifests:通过它我们可以配置启动界面、风格、注册界面等等。只不过这些不用我们来配置,都是由系统来配置。
  • Java:就是我们敲写的一些界面以及功能的代码全在里面。
  • resources(res):是我们资源文件,我们的资源都放在这里面
  • 对于我们在做一个工程是所需的图片,我们可以直接复制粘贴放在我们的drawable里面,也可以直接在外面拖拽进入drawable里面。这样,所需的图片就可以使用了。
    其它的我就不介绍了,可以看图片。


    41.PNG

    在我们的java里面的MainActivity中所谓的Activity:在我们的java里面的MainActivity中所谓的Activity:

  • Activity = 一个界面(系统自带的一个类,管理界面的)
管理一个界面从运行到结束的整个过程/生命周期
  • 配置界面 onCreate (这个方法的重写是系统调用的)
  • 启动界面 start
  • 重新启动 restart
  • 唤醒界面 resume
  • 暂停界面 pause
  • 销毁界面 destroy
 @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");
    }

当我们在运行一个程序时,它会经过一下几个状态:

 界面启动(点击运行程序)
 *    先调用onCreate方法
 *        onStart
 *        onResume
 *
 * 点击home键 回到主界面
 *    会先暂停一下  onPause(通常是保存当前的运行状态)
 *
 * 通过后台 重新运行这个程序(再次打开程序)
 *   onRestart
 *   onStart
 *   onResume
 *
 * 使用返回键  返回到主界面
 *    onPause
 *    onDestroy
xml配置:

当我们在MainActivity里面的onCreat方法里面创建一个界面,那么我们的界面该如何进行布局呢?
通常在开发中有两种方式进行界面布局。

  • xml配置
  • 使用Java代码创建
    在我们安卓开发中,更建议使用的时xml来配置,原因是这是一种解耦的设计模式。
    解耦:这个是Java里面的一个理念 ,在面型对象中把原来引用很紧密的对象通过中间的一层进行分离,不直接引
    用,可能是只引用接口。这样感觉起来因为不直接引用,所以修改起来就好办多了。但实际上还是有引用的。
    xml的界面布局:


    43.PNG

在这里,有需要注意的知识点:

  • 默认一个Activity对应一个xml配置文件
  • 命名特点:activity_界面功能.xml
  • xml文件就是一个容器 :可以放很多UI控件
  • 布局:这么多的控件该如何布局
  •  1.约束布局 ConstraintLayout
    
  •  2.线性布局 LinearLayout (垂直/水平)
    
  •  3.相对布局  RelativeLayout
    
  •  4.帧布局  FrameLayout(可以重叠)
    
  •  5.表格布局 TableLayout GridLayout
    
  •  6.绝对布局  AbsoluteLayout
    

我们今天所要敲写的这个Dmeo是由对图片进行重叠的一个需求,所以我们采用的是帧布局FrameLayout来进一个界面的布局。


45.PNG
46.PNG

44.PNG

我们的帧布局已经搞好了,需要的就是来显示我们的图片
,而图片就是一个控件,控件就是一个视图,视图就是看得到东西。所以,它有很多的控件供我们使用。

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

 * 控件的尺寸
 * 父视图:
 * 子视图:
 * 将一个控件添加到一个容器中,控件就是这个容器的子视图
 * 容器就是这个控件的父视图


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

在这里,我们使用的是ImageView控件。


57.PNG
三种确定控件大小的方式:
 * 1.match_parent  和父视图一样大
 * 2.wrap_content  包裹内容  和空键的内容一样大
 * 3.20dp          具体尺寸
 */
47.PNG
 * 通过添加id号可以唯一标识某一个
 * android:id="@+id/fl_main"
 */

前面我们说了界面的布局有两种方法,那么我们的控件创建又由哪些方法来完成呢?

  • 什么时候需要用代码创建 什么时候使用xml配置
  • 如果添加的控件是静态的(变化的对象不多)选择xml配置
  • 如果需要灵活的操控这个控件 选择代码创建
    xml配置创建控件:


    48.PNG

    代码创建:


    49.PNG
Demo:

创建控件:


44.PNG

MainActivity界面配置:

public class MainActivity extends AppCompatActivity {
    Bitmap copyBitmap;
    Canvas canvas;
    Paint paint;
    Bitmap orgBitmap;
    ImageView forground;

    @Override  //创建一个界面  界面如何布局
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //配置界面
        setContentView(R.layout.activity_main);

        //找到容器里面的图片
        //findViewById
          forground = findViewById(R.id.iv_foreground);

        //将需要操作的图片读取出来
        //BitmapFactory 用于管理位图
        //decodeResource 从工程的资源路径中去生成一张图片
        //getResource  获取工程的资源
        //R.drawable.fr  访问资源路径下 drawable里面的一个fr文件
          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 matrix = new Matrix();
        //旋转图片
       // matrix.setRotate(90,540,1124);
        //平移
        //matrix.setTranslate(540,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 v, 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 = -9; i < 9; i++) {
                        for (int j = -9; j < 9; j++) {
                            copyBitmap.setPixel(x+i,y+j,Color.TRANSPARENT);
                        }
                    }

                   //canvas.drawBitmap(orgBitmap,new Matrix(),paint);
                    forground.setImageBitmap(copyBitmap);
                }
                return true;
            }
        });
    }

至于运行结果,我是在真机上直接运行的,不是模拟器,所以无法在这显示了。

你可能感兴趣的:(Android开发,简单涉及)