安卓 学习基础

安卓工程目录
模块
manifests
仅有一个文件,系统清单文件,相当于web.xml
java
放源文件
res(放系统资源文件,一个很重要的的类R,自动生成,resource的缩写)
drawable(放图片资源)
layout(放布局文件)

dp(密度,相当于width中的百分比)
sp(密度,相当于width中的的数值xxx.px)

  1. Android的基本组件
    1.1 Activity
    1.1.1 Activity代表手机的一个屏幕
    1.1.2 一个Android程序由多个Activity组成,即:一个Android程序由多屏内容组成
    1.1.3 Activity相当于一个展板,本身没有可视的内容,你把画(View)贴到展板上就可以展示出来了
    1.2 Service
    1.2.1 不可见的组件
    1.2.2 在后台运行
    1.2.3 为其他组件提供后台服务
    1.2.4 监控其他组件的运行状态
    1.2.5 后台播放音乐
    1.3 BroadcastReceiver:广播消息监听器
    1.3.1 作用:用来监听广播,eg:收短信的广播 往手机推送消息
    1.4 ContentProvider:内容提供者
    1.4.1 帮助不同的应用程序间交换数据,eg:获取通讯录信息
    1.5 Intent和IntentFilter 意图
    Activity、Service、BroadcastReceiver之间通信的载体,传递数据

  2. View和ViewGroup介绍
    View类似于swing中的JPanel,代表一个空白的矩形区域,Android应用中的绝大部分UI组件都继承于View或其子类
    View还一个重要的子类ViewGroup,它通常作为其它组件的[容器]使

    简单来讲View是所有控件的父控件,ViewGroup可以包含其它的View对象,并且是所有布局控件的父类
    Activity相当于一个展板,本身没有可视的内容,你把画(View)贴到展板上就可以展示出来了
    setContentView(view)

  3. 自定义视图(onDraw)
    3.1 颜色四种设置方式
    canvas.drawColor(Color.RED);//系统颜色(Color.RED)

    canvas.drawColor(Color.rgb(100, 150, 200));//rgb
    canvas.drawColor(Color.argb(100, 100, 150, 200));//argb,其中第一参数为透明度
    canvas.drawColor(Color.parseColor("#44E21D"));//16进制
    3.2 画板背景
    canvas.drawColor(Color.BLUE)
    3.3 画笔设置
    3.3.1 实心或空心
    paint.setStyle(Style.FILL);//实心
    paint.setStyle(Style.STROKE);// 空心
    3.3.2 粗细
    paint.setStrokeWidth(10)
    3.3.3 抗锯齿
    paint.setAntiAlias(true);
    3.3.4 颜色设置
    paint.setColor(Color.parseColor("#103864"));

       4. 画图形
    

4.1 画圆
canvas.drawCircle(200, 100, 100, paint)
4.2 画矩形
canvas.drawRect(0, 200, 200, 400, paint);
canvas.drawRect(rect, paint);
左上角、右下角
4.3 画多边形(三角形)
4.3.1 drawLine方式
4.3.2 drawPath方式
Path
moveTo(float x, float y):将起始点设置到x,y点
lineTo(float x, float y):从当前点绘制一条线段到x,y点
reset():清除path设置的所有属性
close():回到初始化形成封装的曲线
4.3.3 如果画笔为实心,画线与Path方式的区别
drawLine=空心,drawPath=实心
4.5 画文字
drawText()
paint.setTextSize(50);// 设置文字大,单位为dp
4.6 画图
drawBitmap 位图
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.qq);
注意事项:图片名不能是汉字或空格

  1. 什么时候要子类中通过super再调用父类的方法呢?(重要重要)
    如果父方法中有代码就要如此~如果父方法中有代码就要如此~如果父方法中有代码就要如此
    重要的事情说三遍,例如:onDraw可以不用再重新调用super.onDraw(),因为父方法中一行代码都没有

    注1:其实最简单的办法就是不管三七二十一,都调用super.xxx()方法即可

使用画笔画 凹

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class MyView extends View {
    private Paint paint ;

    public MyView(Context context) {

        super(context);
        paint =new Paint(); // new 一个画笔
        paint.setColor(Color.RED);//颜色
        paint.setStrokeWidth(25);//字体大小
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //canvas.drawCircle(200,200,500,paint);
        canvas.drawLine(200,500,800,500,paint);
//笔画
      canvas.drawLine(200,500,200,200,paint);

        canvas.drawLine(200,200,400,200,paint);

        canvas.drawLine(400,200,400,350,paint);

        canvas.drawLine(400,350,600,350,paint);

        canvas.drawLine(800,500,800,200,paint);

        canvas.drawLine(800,200,600,200,paint);

        canvas.drawLine(600,200,600,350,paint);
 
    }
}

使用 path 画凸

import android.graphics.Path;
import android.view.View;
 
public class Tu  extends View {
    private Path path; 
    private Paint paint;
    public Tu(Context context) {
        super(context);
        path=new Path();
        paint=new Paint();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas); 
        path.lineTo(100,300);
        path.lineTo(400,300);
        path.lineTo(400,100);
        path.lineTo(300,100);
        path.lineTo(300,50);
        path.lineTo(200,50);
        path.lineTo(200,100);
        path.lineTo(100,100);

        canvas.drawPath(path,paint);
 
    }
}

文字居中

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;

public class TextView extends View {
    private Paint paint;
    public TextView(Context context) {
        super(context);
         //drawText();
        paint.setTextSize(50);//字体大小
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
        int width = wm.getDefaultDisplay().getWidth();//获得屏幕分辨率
        //获取到字的宽度
        String displayText = "中华人民共和国万岁!";
        float textWidth = paint.measureText(displayText);
        //计算字体出现的x轴
        float f = (width - textWidth) / 2;
        canvas.drawText("中华人民共和国万岁!", f, 500, paint);

    }
}

然后 建立一个新的calss 文件 继承 AppCompatActivity

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
     //   setContentView(R.layout.activity_main);
     // setContentView(new MyView(this));
        setContentView(new TextView(this));
    }
}

猜你喜欢

转载自blog.csdn.net/jiang25810/article/details/83065372