魔乐科技安卓开发教程----李兴华----09图形图像

1.绘制简单图形

使用paint 和Canvas类进行图形操作
绘图操作支持类
在这里插入图片描述

2.绘制一个圆形

1、创建一个自己的MyView类继承自View
绘制一个圆形

public class MyView extends View {
    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.WHITE);
        Paint paint=new Paint();
        paint.setColor(Color.BLUE);
        canvas.drawCircle(30,50,25,paint);
        super.onDraw(canvas);
    }
}

**2、在布局中引入这个自定义的View,实际上就引入常用控件没有大区别
注意这里引入的是:com.fengray.myex021graphic.Myview组件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.fengray.myex021graphic.MyView
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>**

3、主activity:
暂不需要:

结果:
在这里插入图片描述

3.绘制一个矩形
    canvas.drawRect(80,20,160,80,paint);
4.绘制一个矩形框
 Rect rect=new Rect();
        rect.set(180,20,300,80);
        paint.setStyle(Paint.Style.STROKE);
        canvas.drawRect(rect,paint);
5.绘制一个文本框
paint.setColor(Color.RED);
paint.setTextSize(30);
canvas.drawText("北京fengray科技有限",40,160,paint);
6.绘制一个直线
canvas.drawLine(10,120,300,120,paint);
7.绘制一个椭圆
RectF oval=new RectF();
        oval.set(10.0f,240.0f,210.0f,300.0f);
        canvas.drawOval(oval,paint);
8.绘制一个圆弧
oval=new RectF();
        oval.set(250.0f,440.0f,310.0f,600.0f);
        canvas.drawArc(oval,150.0f,140.0f,true,paint);

以上所有案例代码activity部分

public class MyView extends View {
    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.WHITE);
        Paint paint=new Paint();
        paint.setColor(Color.BLUE);
        canvas.drawCircle(30,50,25,paint);
        canvas.drawRect(80,20,160,80,paint);
        Rect rect=new Rect();
        rect.set(180,20,300,80);
        paint.setStyle(Paint.Style.STROKE);
        canvas.drawRect(rect,paint);

        paint.setColor(Color.RED);
        paint.setTextSize(30);
        canvas.drawText("北京fengray科技有限",40,160,paint);
        canvas.drawLine(10,300,300,300,paint);
        RectF oval=new RectF();
        oval.set(10.0f,240.0f,210.0f,300.0f);
        canvas.drawOval(oval,paint);

        oval=new RectF();
        oval.set(250.0f,440.0f,310.0f,600.0f);
        canvas.drawArc(oval,150.0f,140.0f,true,paint);
        super.onDraw(canvas);

    }
}

结果是:
在这里插入图片描述

8.Bitmap组件

在这里插入图片描述
1、创建属于自己的view组件MyView ,继承View

public class MyView extends View {
    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        Bitmap bitmap= BitmapFactory.decodeResource(getResources(), R.drawable.girl);
        Paint paint=new Paint();
        paint.setAntiAlias(true);//消除锯齿
        canvas.drawBitmap(bitmap,0,0,paint);
        paint.setColor(Color.BLUE);//底色
        paint.setTextSize(60);
        canvas.drawText("图片高度为:"+ bitmap.getWidth()+",图片高度:"+bitmap.getHeight(),10,bitmap.getHeight()+80,paint);

        super.onDraw(canvas);
    }
}

2、布局中引入自定义的Myview组件

<LinearLayout 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">

    <com.fengray.myex022bitmap.MyView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

3、主activity无需输入

结果:
在这里插入图片描述

9.使用图片填充屏幕

同上例,修改Myview类为:

public class MyView extends View {
    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        DisplayMetrics dm=getResources().getDisplayMetrics();

        int screenWidth=dm.widthPixels;
        int screenHight=dm.heightPixels;

        Bitmap bitmap= BitmapFactory.decodeResource(getResources(), R.drawable.girl);
        bitmap=Bitmap.createScaledBitmap(bitmap,screenWidth,screenHight,true);
        Paint paint=new Paint();
        paint.setAntiAlias(true);//消除锯齿
        canvas.drawBitmap(bitmap,0,0,paint);

        super.onDraw(canvas);
    }
}

结果:照片被拉伸
在这里插入图片描述

10.局部使用图片(指定位置使用图片)

上上例中修改MyView类

public class MyView extends View {
    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {

        Bitmap bitmap= BitmapFactory.decodeResource(getResources(), R.drawable.girl);
        Paint paint=new Paint();
        paint.setAntiAlias(true);//消除锯齿
        canvas.drawBitmap(bitmap,null,new Rect(30,50,600,1200),paint);//按照30,50,600,1200切图,按照左上下右的顺序

        super.onDraw(canvas);
    }
}

结果是:
在这里插入图片描述

11.Matrix

在这里插入图片描述
1.创建Myview类,继承View类

public class MyView extends View {
    private Bitmap bitmap=null;
    private Matrix matrix=new Matrix();
    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context,attrs);
        bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.logo);
        //以下各种缩放,反正我是看不懂
        float cosValue= (float) Math.cos(-Math.PI/3);//60弧度
        float sinValue= (float) Math.sin(-Math.PI/3);
        matrix.setValues(new float[]{cosValue,-sinValue,700,sinValue,cosValue,800,0,0,2});
    }

    @Override
    protected void onDraw(Canvas canvas) {

        canvas.drawBitmap(bitmap,matrix,null);


        super.onDraw(canvas);
    }
}

2.创建布局文件

<androidx.constraintlayout.widget.ConstraintLayout 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">

    <com.fengray.myex023matrix.MyView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:ignore="MissingConstraints" />

</androidx.constraintlayout.widget.ConstraintLayout>

3、主activity文件为空

结果为:图片产生了旋转
在这里插入图片描述
另外一种旋转,myview类如下:

public class MyView extends View {
    private Bitmap bitmap=null;
    private Matrix matrix=new Matrix();
    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context,attrs);
        bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.logo);
        //以下各种缩放,反正我是看不懂
        float cosValue= (float) Math.cos(-Math.PI/3);
        float sinValue= (float) Math.sin(-Math.PI/3);
        matrix.preScale(0.5f,0.5f,50,100);
        matrix.preRotate(-60,500,1000);
        matrix.preTranslate(500,1000);
    }

    @Override
    protected void onDraw(Canvas canvas) {

        canvas.drawBitmap(bitmap,matrix,null);


        super.onDraw(canvas);
    }
}

结果如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值