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
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...