1. 程式人生 > >Android自定義view畫五星紅旗

Android自定義view畫五星紅旗

<com.example.day03_view_demo.StarFlagView
android:layout_height="match_parent"
android:layout_width="match_parent" />
、、
java程式碼:
public class StarFlagView extends SurfaceView implements SurfaceHolder.Callback ,Runnable{


    private final static int STAR_COLOR = 0xffffff00;
    private final static int 
BACK_COLOR = 0xffff0000; private SurfaceHolder mHolder; private boolean isStop = false; private Thread mThread; private Path mBigStarPath; private Path[] mSmallStarsPath; private Paint mStarPaint; private int mWidth, mHeight; private Paint mBackPaint; public StarFlagView(Context context) { super
(context); init(null, 0); } public StarFlagView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(attrs, defStyle); } public StarFlagView(Context context, AttributeSet attrs) { super(context, attrs); init(attrs, 0
); } private void init(AttributeSet attrs, int defStyle) { mHolder = getHolder(); mHolder.addCallback(this); setFocusable(true); setFocusableInTouchMode(true); setZOrderOnTop(true); mHolder.setFormat(PixelFormat.TRANSPARENT);// 設定背景透明 mThread = new Thread(this); } public void run() { Canvas canvas = null; while (!isStop) { try { canvas = mHolder.lockCanvas(); canvas.drawColor(Color.BLACK, PorterDuff.Mode.CLEAR);// 清除螢幕 canvas.drawRect(0, 0, mWidth, mHeight, mBackPaint); canvas.drawPath(mBigStarPath, mStarPaint); for (int i = 0; i < mSmallStarsPath.length; i++) { canvas.drawPath(mSmallStarsPath[i], mStarPaint); } } catch (Exception e) { e.printStackTrace(); } finally { if (canvas != null) { mHolder.unlockCanvasAndPost(canvas); } } try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } public void surfaceCreated(SurfaceHolder holder) { // 大圓中心點 int width = getWidth(); int height = getHeight(); if (width * 2 / 3 > height) { width = height / 2 * 3; } else { height = width / 3 * 2; } int cellWidth = width / 30; mWidth = width; mHeight = height; // 大五角星路徑 mBigStarPath = createStarPath(new PointF(width / 6, height / 4), width / 10, -90); // 小五角星路徑 mSmallStarsPath = new Path[4]; mSmallStarsPath[0] = createStarPath(new PointF(cellWidth * 10, cellWidth * 2), cellWidth, (float) (Math.atan2(3, -5) / Math.PI * 180)); mSmallStarsPath[1] = createStarPath(new PointF(cellWidth * 12, cellWidth * 4), cellWidth, (float) (Math.atan2(1, -7) / Math.PI * 180)); mSmallStarsPath[2] = createStarPath(new PointF(cellWidth * 12, cellWidth * 7), cellWidth, (float) (Math.atan2(-2, 7) / Math.PI * 180)); mSmallStarsPath[3] = createStarPath(new PointF(cellWidth * 10, cellWidth * 9), cellWidth, (float) (Math.atan2(-4, 5) / Math.PI * 180-90)); mStarPaint = new Paint(); mStarPaint.setColor(STAR_COLOR); mStarPaint.setStyle(Paint.Style.FILL); mStarPaint.setAntiAlias(true);// 抗鋸齒 mBackPaint = new Paint(); mBackPaint.setColor(BACK_COLOR); mBackPaint.setStyle(Paint.Style.FILL); mThread.start(); } public void surfaceDestroyed(SurfaceHolder holder) { isStop = true; } private Path createStarPath(PointF centerPointF, float radius, float rotate) { final double arc = Math.PI / 5; final double rad = Math.sin(Math.PI / 10) / Math.sin(3 * Math.PI / 10); Path path = new Path(); path.moveTo(1, 0); for (int idx = 0; idx < 5; idx++) { path.lineTo((float) (rad * Math.cos((1 + 2 * idx) * arc)), (float) (rad * Math.sin((1 + 2 * idx) * arc))); path.lineTo((float) (Math.cos(2 * (idx + 1) * arc)), (float) (Math.sin(2 * (idx + 1) * arc))); } path.close(); Matrix matrix = new Matrix(); matrix.postRotate(rotate); matrix.postScale(radius, radius); matrix.postTranslate(centerPointF.x, centerPointF.y); path.transform(matrix); return path; } }

相關推薦

Android定義view五星紅旗

<com.example.day03_view_demo.StarFlagView android:layout_height="match_parent" android:layout_width="match_parent" /> 、、 java程式碼: public class Sta

初識Android定義View----一個圓

新建一個CircleView類 public class CircleView extends View { private Paint mPaint; private Resources resources = getResources();

Android定義View出一個時鐘(時針、分針、秒針)完美搭配當前時間走動

1、獲取時間值 private void getDatas() { SimpleDateFormat format = new SimpleDateFormat("HH,mm,ss"); String time = format

Android定義View ——弧線詳解(Rectf放入用法)

好久沒有寫部落格了。最近想寫一個關於Android的介面,類似於遙控器按鈕形狀,就是類似於下面這張圖片,但是我想設計的使上下左右四個按鈕不是連在一起的,他們之間是有間隔的。在設計的途中關於畫弧線這個函式,我一直沒有理解,所以就這部分進行了一些測試,大家看過這張圖片之後就明白

Android定義View圓+進度條+定義View梯形

//自定義進度圓圈 package com.bw.20171104; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas

手把手帶你一個動態錯誤提示 Android定義view

嗯。。再差1篇就可以獲得持之以恆徽章了,今天帶大家畫一個比較簡單的view。 轉載請註明出處:http://blog.csdn.net/wingichoy/article/details/50477108 廢話不多說,看效果圖: 首先 建構函式 測量... 這裡就一筆帶

手把手帶你一個 時尚儀表盤 Android 定義View

拿到美工效果圖,咱們程式設計師就得畫得一模一樣。 為了不被老闆噴,只能多練啊。 聽說你覺得前面幾篇都so easy,那今天就帶你做個相對比較複雜的。 轉載請註明出處:http://blog.csdn.net/wingichoy/article/details/50468

android定義view圓隨著手指移動

public class MyView extends View { private Paint mFanPaint,mTextPaint;//扇形畫筆和文字畫筆 public float AxisX=100; public float AxisY=100; public MyView(

android定義view心電圖

話不多說,直奔主題: 首先封裝一個讀取本地檔案的類: public class TxtReader { /** * &#x901a;&#x8fc7;&#x4e00;&#x4e2a;InputStream&#x83b7;&#x53d6;&

Android定義View一個好看帶延長線的餅狀圖

開發十年,就只剩下這套架構體系了! >>>   

Android 定義View

wid declare created odi lex getwidth 實現 tdi led   最近在看鴻洋大神的博客,在看到自定義部分View部分時,想到之前案子中經常會要用到"圖片 + 文字"這類控件,如下圖所示: 之前的做法是在布局文件中,將一個Imag

Android定義view詳解

this boolean mar 處理 都是 並且 jdk text 命名 從繼承開始 懂點面向對象語言知識的都知道:封裝,繼承和多態,這是面向對象的三個基本特征,所以在自定義View的時候,最簡單的方法就是繼承現有的View 通過上面這段代碼,我定義了一個Ske

Android -- 定義view實現keep歡迎頁倒計時效果

super onfinish -m use new getc awt ttr alt 1,最近打開keep的app的時候,發現它的歡迎頁面的倒計時效果還不錯,所以打算自己來寫寫,然後就有了這篇文章。 2,還是老規矩,先看一下我們今天實現的效果   相較於我們常見的倒計時

Android定義View效果目錄

class 重寫 自定義 textview 居中 url 冒泡 and 雷達圖 1、絢麗的loading動效的實現 2、Android自定義View:進度條+冒泡文本 3、Android雷達圖(蜘蛛網圖) 4、Android文本閃爍 5、Android繪制圓形進度條 6、重

Android定義View——實現水波紋效果類似剩余流量球

string 三個點 pre ber block span 初始化 move 理解 最近突然手癢就想搞個貝塞爾曲線做個水波紋效果玩玩,終於功夫不負有心人最後實現了想要的效果,一起來看下吧: 效果圖鎮樓 一:先一步一步來分解一下實現的過程 需要繪制一個正弦曲線(sin

Android 定義 View 知識點

移動 encode swe em1 red 鋸齒 枚舉類 map() tex 根據 Hencoder 提供的知識點,進行學習和總結。 三個要點: 布局 繪制 觸摸反饋 繪制 自定義繪制:由自己實現繪制過程 常用繪制方法 onDraw(Canvas canvas) 繪制

Android定義view與activity的傳值

重復 轉動 自定義 activit 廣播 內部 代碼 view 等待 昨晚在寫團隊項目的時候,遇到一個問題,直到今天早上才解決。。。即在自定義view“轉盤”結束轉動後獲取結果的處理中,我是想吧值傳到activity中的一個textview中的,但我的自定義view類不是a

Android 定義View - 助記詞

UI今天給了個需求,把亂序的單詞拼成一句話,如下圖: 本來計劃是用ViewGroup+TextView寫的,突然腦子抽了想用paint來畫(寫完就後悔了-.-) 先看一下完成後的效果 前期的思路是這樣的: 1.測量每個單詞的高度和寬度,計算出所有單詞排列後的高*2,就是view

Android定義View--翻書控制元件(一)

0.前言 最近重看了一遍封神演義,感覺QQ閱讀那個翻書的效果挺好的,準備做一個。上週五下午用了兩個小時只寫了一部分功能,以後有時間再完善 1.分析 先看效果圖 這個空間,說簡單也簡單,說難也難,簡單就在於這個效果主要就是依賴canvas的clippath才見到部分canvas,難就難在裁

Android 定義view深入剖析

前言 自定義View原理是Android開發者必須瞭解的基礎; 在瞭解自定義View之前,你需要有一定的知識儲備; 本文將全面解析關於自定義View中的所有知識基礎。 目錄 1. View的分類 檢視View主要分為兩類: