android ShapeDrawable例項
android ShapeDrawable例項
- 關於ShapeDrawable的使用,分為兩個部分
- 一、是使用已經存在的ShapeDrawable子類
- (1)首先宣告ShapeDrawable物件,有子類例項化。
- (2)設定ShapeDrawable物件的Color或者Shader,Shader是一個渲染圖形的類
- (3)在View中的onDraw()方法中,利用ShapeDrawable.setBounds()方法設定繪圖區域,ShapeDrawable.draw(Canvas)把ShapeDrawable物件畫到畫布的指定位置
- 二、重新構造自己的ShapeDrawable子類
- 必須重寫onDraw()方法。其他的如上
- 其他的一些可以看註釋,所有的都在這個檔案中就傳工程了。
- package com.example.test;
- import android.app.Activity;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.BitmapShader;
- import android.graphics.Canvas;
- import android.graphics.ComposePathEffect;
- import android.graphics.CornerPathEffect;
- import android.graphics.DiscretePathEffect;
- import android.graphics.LinearGradient;
- import android.graphics.Paint;
- import android.graphics.Path;
- import android.graphics.PathEffect;
- import android.graphics.RectF;
- import android.graphics.Shader;
- import android.graphics.SweepGradient;
- import android.graphics.drawable.Drawable;
- import android.graphics.drawable.ShapeDrawable;
- import android.graphics.drawable.shapes.ArcShape;
- import android.graphics.drawable.shapes.OvalShape;
- import android.graphics.drawable.shapes.PathShape;
- import android.graphics.drawable.shapes.RectShape;
- import android.graphics.drawable.shapes.RoundRectShape;
- import android.graphics.drawable.shapes.Shape;
- import android.os.Bundle;
- import android.view.View;
- /*
- * 關於ShapeDrawable的使用,分為兩個部分
- * 一、是使用已經存在的ShapeDrawable子類
- * (1)首先宣告ShapeDrawable物件,有子類例項化。
- * (2)設定ShapeDrawable物件的Color或者Shader,Shader是一個渲染圖形的類
- * (3)在View中的onDraw()方法中,利用ShapeDrawable.setBounds()方法設定繪圖區域
- * ShapeDrawable.draw(Canvas)把ShapeDrawable物件畫到畫布的指定位置
- * 二、重新構造自己的ShapeDrawable子類
- * 必須重寫onDraw()方法。其他的如上
- */
- public class ShapeDrawble1 extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(new SampleView(this));
- }
- private static class SampleView extends View {
- private ShapeDrawable[] mDrawables;
- private static Shader makeSweep() {
- return new SweepGradient(150, 25, new int[] { 0xFFFF0000,
- 0xFF00FF00, 0xFF0000FF, 0xFFFF0000 }, null);// null 表示均衡變化
- }
- private static Shader makeLinear() {
- // 顏色按照直線線性變化的著色器
- return new LinearGradient(0, 0, 50, 50, new int[] { 0xFFFF0000,
- 0xFF00FF00, 0xFF0000FF }, null, Shader.TileMode.MIRROR);
- }
- private static Shader makeTiling() {
- int[] pixels = new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 0 };
- Bitmap bm = Bitmap.createBitmap(pixels, 2, 2,
- Bitmap.Config.ARGB_8888);
- return new BitmapShader(bm, Shader.TileMode.REPEAT,
- Shader.TileMode.REPEAT);
- }
- private static class MyShapeDrawable extends ShapeDrawable {
- // Paint.ANTI_ALIAS_FLAG代表這個畫筆的圖形是光滑的
- private Paint mStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
- public MyShapeDrawable(Shape s) {
- super(s);
- mStrokePaint.setStyle(Paint.Style.STROKE);
- }
- public Paint getStrokePaint() {
- return mStrokePaint;
- }
- @Override
- protected void onDraw(Shape s, Canvas c, Paint p) {
- // 繪製填充效果的圖形
- s.draw(c, p);
- // 繪製黑邊
- s.draw(c, mStrokePaint);
- }
- }
- public SampleView(Context context) {
- super(context);
- setFocusable(true);
- // 外部圓角矩形的圓角圓半徑,上面倆個角是圓
- float[] outerR = new float[] { 12, 12, 12, 12, 0, 0, 0, 0 };
- // 內部矩形,用於設定外部的矩形和內部矩形之間的距離,第一個引數設定左邊
- //第二個引數設定上邊,第三個設定右邊,第四個引數設定下邊
- RectF inset = new RectF(6, 6, 6,6);
- // 內部圓角矩形的圓角是圓半徑,左上角和右下角是圓角矩形
- float[] innerR = new float[] { 12, 12, 0, 0, 12, 12, 0, 0 };
- // 繪製一個頂點為下列四個點的稜形
- Path path = new Path();
- path.moveTo(50, 0);
- path.lineTo(0, 50);
- path.lineTo(50, 100);
- path.lineTo(100, 50);
- // 封閉前面點所繪製的路徑
- path.close();
- mDrawables = new ShapeDrawable[7];
- // 繪製矩形
- mDrawables[0] = new ShapeDrawable(new RectShape());
- // 繪製橢圓
- mDrawables[1] = new ShapeDrawable(new OvalShape());
- // 繪製上面倆個角是圓角的矩形
- mDrawables[2] = new ShapeDrawable(new RoundRectShape(outerR, null,
- null));
- // 繪製上面倆角是圓角,並且有一個內嵌的矩形
- mDrawables[3] = new ShapeDrawable(new RoundRectShape(outerR, inset,
- null));
- // //繪製上面倆角是圓角,並且有一個內嵌的矩形且左上角和右下角是圓形矩形環
- mDrawables[4] = new ShapeDrawable(new RoundRectShape(outerR, inset,
- innerR));
- // 繪製指定路徑的集合體
- mDrawables[5] = new ShapeDrawable(new PathShape(path, 100, 100));
- // 用自定的ShapDrawble繪製開始弧度45掃過弧度-270的橢圓
- mDrawables[6] = new MyShapeDrawable(new ArcShape(45, -270));
- mDrawables[0].getPaint().setColor(0xFFFF0000);
- mDrawables[1].getPaint().setColor(0xFF00FF00);
- mDrawables[2].getPaint().setColor(0xFF0000FF);
- mDrawables[3].getPaint().setShader(makeSweep());
- mDrawables[4].getPaint().setShader(makeLinear());
- mDrawables[5].getPaint().setShader(makeTiling());
- mDrawables[6].getPaint().setColor(0x88FF8844);
- // DiscretePathEffect是一個折線路徑效果,分割長度是10,偏差時4
- PathEffect pe = new DiscretePathEffect(10, 4);
- // CornerPathEffect是將2個路徑效果合併後的路徑效果
- PathEffect pe2 = new CornerPathEffect(4);
- mDrawables[3].getPaint().setPathEffect(
- new ComposePathEffect(pe2, pe));
- MyShapeDrawable msd = (MyShapeDrawable) mDrawables[6];
- // 設定筆畫寬度等於4
- msd.getStrokePaint().setStrokeWidth(4);
- }
- @Override
- protected void onDraw(Canvas canvas) {
- int x = 10;
- int y = 10;
- int width = 300;
- int height = 50;
- // 迴圈繪製
- for (Drawable dr : mDrawables) {
- dr.setBounds(x, y, x + width, y + height);
- dr.draw(canvas);
- y += height + 5;
- }
- }
- }
- }
相關文章
- android Dialog例項Android
- Android hello world例項Android
- Android uiautomator例項使用AndroidUI
- [Android]Gank 元件化例項AppAndroid元件化APP
- android socket程式設計例項Android程式設計
- [Android]單元測試例項Android
- android的Log輸出(例項)Android
- Android RecyclerView 簡介與例項AndroidView
- Android 自定義 TabActivity 的例項方法Android
- android原生開發recyclerview基礎例項AndroidView
- Android專案常用功能綜合例項Android
- Android Input子系統-含例項原始碼Android原始碼
- Android開發:ContentProvider例項詳解AndroidIDE
- Android:Retrofit 2.0 使用攻略(含例項講解)Android
- Android 中MVC例項之Activity,Window和ViewAndroidMVCView
- [Android例項]通話接通後震動提示Android
- Android 動態載入資源例項解析Android
- Android生成ViewModel例項的幾種方式AndroidView
- 單例項刪除ASM例項單例ASM
- Android應用例項之----基於BroadCastReceiver的SD卡裝載解除安裝例項!AndroidASTSD卡
- php例項化物件的例項方法PHP物件
- ruby中的類例項變數和例項的例項變數變數
- Android RxJava 背壓策略:圖文 + 例項 全面解析AndroidRxJava
- Android SharedPreferences儲存資料使用例項分析Android
- Android感測器程式設計例項原始碼Android程式設計原始碼
- Android感測器程式設計帶例項(轉)Android程式設計
- 《Android攻略》資源豐富的例項手冊Android
- 2 Day DBA-管理Oracle例項-Oracle例項和例項管理概覽Oracle
- [android]android自動化測試十之單元測試例項Android
- jQuery 例項jQuery
- OkHttpClient例項HTTPclient
- phpcocket例項PHP
- unittest例項
- Android外掛化快速入門與例項解析(VirtualApk)AndroidAPK
- Android探索之旅 | AIDL原理和例項講解AndroidAI
- Android 簡單瀏覽器例項-webview控制元件Android瀏覽器WebView控制元件
- Android:清晰講解JNI 與 NDK(含例項教學)Android
- android view 自定義viewgroup 例項--螢幕滑動AndroidView