Android中使用Canvas和Paint繪製一個安卓機器人

来源:https://www.cnblogs.com/badaoliumangqizhi/archive/2020/01/10/12178686.html
-Advertisement-
Play Games

場景 在Android中畫筆使用Paint類,畫布使用Canvas類來表示。 繪圖的基本步驟 首先編寫一個繼承自View的自定義View類,然後重寫其onDraw方法,最後把自定義的view添加到actvity中。 效果 註: 博客: https://blog.csdn.net/badao_lium ...


場景

在Android中畫筆使用Paint類,畫布使用Canvas類來表示。

繪圖的基本步驟

首先編寫一個繼承自View的自定義View類,然後重寫其onDraw方法,最後把自定義的view添加到actvity中。

效果

 

 

註:

博客:
https://blog.csdn.net/badao_liumang_qizhi
關註公眾號
霸道的程式猿
獲取編程相關電子書、教程推送與免費下載。

實現

首先在要顯示的Activity的佈局文件中修改為FrameLayout並添加一個id。

<?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:id="@+id/frameLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".RobitActivity">

</FrameLayout>

然後在ACtivity中新建自定義View類,這裡是MyView使其繼承View類並編寫一個帶一個參數的構造方法和重寫onDraw方法。

在重寫的onDraw方法中新建畫筆並設置一些屬性,然後使用畫筆在畫布上指定的位置繪製圖形。

package com.badao.alarmmanager;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;

public class RobitActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_robit);
        FrameLayout frameLayout= (FrameLayout) findViewById(R.id.frameLayout);  //獲取幀佈局管理器
        frameLayout.addView(new MyView(this));  //將自定義視圖的內部類添加到佈局管理器中
    }

    private class MyView extends View {
        public MyView(Context context) {
            super(context);
        }

        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            Paint paint=new Paint(); //預設設置創建一個畫筆
            paint.setAntiAlias(true); //使用抗鋸齒功能
            paint.setColor(0xFFA4C739); //設置畫筆的顏色為綠色
            //繪製機器人的頭
            RectF rectf_head=new RectF(10, 10, 100, 100);
            rectf_head.offset(90, 20);
            canvas.drawArc(rectf_head, -10, -160, false, paint); //繪製弧
            //繪製眼睛
            paint.setColor(Color.WHITE); //設置畫筆的顏色為白色
            canvas.drawCircle(125, 53, 4, paint); //繪製圓
            canvas.drawCircle(165, 53, 4, paint); //繪製圓
            paint.setColor(0xFFA4C739); //設置畫筆的顏色為綠色
            //繪製天線
            paint.setStrokeWidth(2); //設置筆觸的寬度
            canvas.drawLine(110, 15, 125, 35, paint); //繪製線
            canvas.drawLine(180, 15, 165, 35, paint); //繪製線
            //繪製身體
            canvas.drawRect(100, 75, 190, 150, paint); //繪製矩形
            RectF rectf_body=new RectF(100,140,190,160);
            canvas.drawRoundRect(rectf_body, 10, 10, paint); //繪製圓角矩形
            //繪製胳膊
            RectF rectf_arm=new RectF(75,75,95,140);
            canvas.drawRoundRect(rectf_arm, 10, 10, paint); //繪製左側的胳膊
            rectf_arm.offset(120, 0);       //設置在X軸上偏移120像素
            canvas.drawRoundRect(rectf_arm, 10, 10, paint); //繪製右側的胳膊
            //繪製腿
            RectF rectf_leg=new RectF(115,150,135,200);
            canvas.drawRoundRect(rectf_leg, 10, 10, paint); //繪製左側的腿
            rectf_leg.offset(40, 0);       //設置在X軸上偏移40像素
            canvas.drawRoundRect(rectf_leg, 10, 10, paint); //繪製右側的腿
        }
    }
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MRAM是一種以電阻為存儲方式結合非易失性及隨機訪問兩種特性,可以兼做記憶體和硬碟的新型存儲介質。寫入速度可達NAND快閃記憶體的數千倍,此外,其製作工藝要求低,良品率高,可以很好的控製成本。在壽命方面,由於MRAM特殊的存儲方式,產品的壽命耐久性也遠超傳統RAM。大規模普及仍面臨挑戰 毫無疑問,MRAM因 ...
  • 學習使用linux 偶然間看到一篇介紹linux的使用,於是看了看,整體看完,雖然看的有些懵✒,但還是堅持看完了基礎部分,並做了一些摘要。 man頁面所屬的分類標識 常用的是分類1和分類3 (1)、用戶可以操作的命令或者是可執行文件 (2)、系統核心可調用的函數與工具等 (3)、一些常用的函數與數據 ...
  • Linux的預設管理員名即是root,只需要知道ROOT密碼即可直接登錄SSH。禁止Root從SSH直接登錄可以提高伺服器安全性。經過以下操作後即可實現。本文適用於CentOS、Debian等Linux系統。 新建用戶 配置密碼 配置不允許root用戶直接登錄 修改相關文件 禁止root登陸 重啟s ...
  • 前言:學習的課程來自極客時間的專欄《趣談 Linux 操作系統》,作者用形象化的比喻和豐富的圖片讓課程變得比較易懂,為了避免知識看過就忘,打算通過寫學習筆記的形式記錄自己的學習過程。Linux 系統的相關介紹不再贅述,目前比較熱門的技術,比如雲計算、虛擬化、容器、大數據、人工智慧,幾乎都是基於 Li ...
  • 數據定義 資料庫 表 擴展 函數 索引 許可權控制 運行分析 運行維護 配置 備份還原 其他 時間處理 psql ...
  • 圖的基本概念 首先,你要明確圖是什麼樣子的,就是下麵這個樣子的 圖的定義與術語 有向圖和無向圖 直接對比圖就可以看出來,有向圖和無向圖的區別了,這個沒有什麼難的。 有向圖和無向圖的表示法有略微的區別,註意看 G1有箭頭,有向圖,表示方法是 G2無箭頭,無向圖,表示方法是 弧、弧頭、弧尾:有向圖的邊稱 ...
  • 數據遷移導致的資料庫數據不一致事件屢見不鮮。如何避免?如何閉坑? ...
  • [toc] "示例完整源碼地址" 2020年1月10日 10:10:10 shanzm 0 .net中的緩存對象 MemoryCache對象 HttpContext.Cache (Asp.net)對象 示例:(詳見: "001MemoryCache" ) 1.MemCached 安裝包下載: "推薦 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...