亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android自定義View過程解析

2020-04-11 10:54:54
字體:
來源:轉載
供稿:網友

Android自定義的view,主要是繼承view,然后實現ondraw這個方法,來進行繪制。

  • 1. 編寫自己的自定義view
  • 2. 加入邏輯線程
  • 3. 提取和封裝自定義view
  • 4. 利用xml中定義樣式來影響顯示效果

一、編寫自定義的view
1.在xml中使用自己的view

 <!-- 可以使用view的公共屬性,例如背景 --> <com.niuli.view.MyView   android:layout_width="match_parent"  android:layout_height="match_parent"  android:background="#ffff00"  />

2.通過繼承view,然后實現ondraw來實現方法

public class MyView extends View { Bitmap bitmap; public MyView(Context context) {  super(context);  /**   * getResources()可以獲取當前資源內的資源   */  bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); } public MyView(Context context, AttributeSet attrs) {  super(context, attrs);  bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); } /**  * 繪制是通過Canvas來承載,其就相當于一塊畫布  * 更多的學習將在不斷的做小東西中更新  */ @Override protected void onDraw(Canvas canvas) {  super.onDraw(canvas);  /**   * Paint相當于一只畫筆,可以畫文字,幾何圖形,bit圖片等   */  Paint paint = new Paint();  //設置繪制的顏色,是否空心之類的都是對畫筆的設計  paint.setColor(Color.BLUE);  //繪畫文字  paint.setTextSize(30);  canvas.drawText("這是一個自定義view", 0, 30, paint);  //繪畫直線  canvas.drawLine(0, 60, 100, 60, paint);  //繪畫圓角矩形方法之一  //設置空心  paint.setStyle(paint.getStyle().STROKE);  RectF rec = new RectF(0, 90, 100, 190);  canvas.drawRoundRect(rec, 20, 20, paint);  //繪制圖片  canvas.drawBitmap(bitmap, 0, 350, paint); }}

效果

二、自定義的view+線程的使用控制
繪制文字,和圓形,通過線程控制使得其能在屏幕中移動

public class MyViewtwo extends View { //定義畫筆 private Paint paint = new Paint(); private int x; private float sweepAngle; private control thread; private Random random = new Random(); public MyViewtwo(Context context, AttributeSet attrs) {  super(context, attrs); } public MyViewtwo(Context context) {  super(context); } @Override protected void onDraw(Canvas canvas) {  paint.setTextSize(80);  //繪制文字  canvas.drawText("七夕快樂", x, 70, paint);  //繪制圖形  RectF rect = new RectF(0 ,80 ,100, 160);  canvas.drawArc(rect, 0, sweepAngle, true, paint);  //啟動線程  if (thread ==null) {   thread = new control();   thread.start();  } } public class control extends Thread{  @Override  public void run() {   while(true){    x +=3;    sweepAngle++;    if (x>getWidth()) {     x = (int) (0 - paint.measureText("七夕快樂"));    }    //控制圓的的旋轉    if (sweepAngle>360) {     sweepAngle = 0;    }    //設置畫筆顏色    paint.setARGB(255, random.nextInt(255), random.nextInt(255), random.nextInt(255));    //相當于刷新畫布    postInvalidate();    try {     sleep(30);    } catch (InterruptedException e) {     e.printStackTrace();    }   }  } }

效果 

 

三、封裝移動程序,模塊化思想
封裝主要是使用抽象方法,子類繼承后只要實現這些方法即可運行起來,大大簡化了程序

public abstract class MyViewtwo extends View { private control thread; public MyViewtwo(Context context, AttributeSet attrs) {  super(context, attrs); } public MyViewtwo(Context context) {  super(context); } //封裝,構造畫面,子類繼承后需要重寫 protected abstract void drawsub(Canvas canvas); @Override protected final void onDraw(Canvas canvas) {  //啟動線程  if (thread ==null) {   thread = new control();   thread.start();  }else {   drawsub(canvas);  } } //封裝移動方法,子類繼承后需要重寫 protected abstract void move(); public class control extends Thread{  @Override  public void run() {   while(true){    move();    //相當于刷新畫布    postInvalidate();    try {     sleep(30);    } catch (InterruptedException e) {     e.printStackTrace();    }   }  } }}

四、使用xml中定義樣式影響顯示效果
1、第一步就是在value文件夾中建立自己的樣式文件

<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="NumText">  <attr name="lineNum" format="integer"/>  <attr name="xScroll" format="boolean" /> </declare-styleable></resources>

2、xml中先要加入命名空間,然后就可以直接使用屬性

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:nt="http://schemas.android.com/apk/res/com.jikexueyuan.myview" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" > <com.jikexueyuan.myview.v4.NumText   android:layout_width="match_parent"  android:layout_height="match_parent"   nt:lineNum="6"  nt:xScroll="true"/></FrameLayout>

3、代碼中要有相應的解析xml中定義的這個元素

public NumText(Context context, AttributeSet attrs) {  super(context, attrs);  TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.NumText);  lineNum = ta.getInt(R.styleable.NumText_lineNum, 1);  xScroll = ta.getBoolean(R.styleable.NumText_xScroll, false);  ta.recycle(); }

主要就是利用以上方法和xml中定義元素值進行曝光相關聯。

以上就是本文的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人妇女免费播放久久久| 日韩精品中文字幕视频在线| 日韩电影中文字幕一区| 欧美裸体男粗大视频在线观看| 91久久在线播放| 欧美韩国理论所午夜片917电影| 亚洲影视九九影院在线观看| 欧美性理论片在线观看片免费| 国产精品偷伦视频免费观看国产| 久久久噜噜噜久久久| 亚洲精品在线视频| 亚洲欧美日韩国产成人| 国产精品视频999| 久久中国妇女中文字幕| 日韩亚洲一区二区| 久久久精品在线观看| 57pao成人永久免费视频| 亚洲日韩中文字幕| 日韩男女性生活视频| 性视频1819p久久| 成人欧美一区二区三区在线湿哒哒| 久久99热精品这里久久精品| 日韩精品极品毛片系列视频| 久久人91精品久久久久久不卡| 精品偷拍各种wc美女嘘嘘| 国产精品91视频| 亚洲精品国产综合区久久久久久久| 亚洲性视频网址| 777精品视频| 精品国产91乱高清在线观看| 中文在线资源观看视频网站免费不卡| 北条麻妃一区二区三区中文字幕| 亚洲精品国精品久久99热| 欧美日韩免费区域视频在线观看| 午夜精品一区二区三区av| 亚洲国产成人精品一区二区| 日韩av在线播放资源| 中日韩午夜理伦电影免费| 欧日韩不卡在线视频| 欧美性极品xxxx做受| 国产精品久久久久久久久久尿| 亚洲国产成人精品女人久久久| 午夜精品一区二区三区在线视| 欧美老肥婆性猛交视频| 国产深夜精品福利| 亚洲高清久久久久久| 久久久中精品2020中文| 亚洲成av人片在线观看香蕉| 国产精品久久91| 亚洲毛片在线看| 欧美激情va永久在线播放| 久久影视电视剧凤归四时歌| 国产成人91久久精品| 欧美日韩成人精品| 久久视频精品在线| 最近2019免费中文字幕视频三| 精品视频在线播放色网色视频| 欧美精品一区三区| 亚洲第一网中文字幕| 久久国产精品久久精品| 国产精品h片在线播放| 国产999在线观看| 亚洲国产精品视频在线观看| 日韩经典中文字幕| 亚洲国产精品福利| 久久99视频精品| 国产精品久久久久久婷婷天堂| 国产精品自产拍在线观看中文| 92版电视剧仙鹤神针在线观看| 国产日韩中文在线| 久久久这里只有精品视频| 日本高清视频精品| 日韩美女福利视频| 国产成人精品久久亚洲高清不卡| 国产精品久久久久久av福利软件| 中文字幕综合在线| 欧美日韩激情网| 亚洲综合色激情五月| 色偷偷噜噜噜亚洲男人的天堂| 亚洲电影成人av99爱色| 欧美做爰性生交视频| 国产在线精品播放| 亚洲人成啪啪网站| 这里只有精品在线观看| 久久视频这里只有精品| 精品国产户外野外| 久久久久久国产免费| 亚洲国产精品电影在线观看| 欧美激情一级欧美精品| 欧美一级成年大片在线观看| 日韩极品精品视频免费观看| 久久久亚洲天堂| 狠狠躁夜夜躁人人躁婷婷91| 国产一区二区三区欧美| 亚洲成人网在线| 亚洲网站在线看| 久久精品视频播放| 国产乱人伦真实精品视频| 精品久久久久久中文字幕大豆网| 中文字幕日韩精品有码视频| 欧美高清无遮挡| 国产精品99久久久久久www| 亚洲欧美综合图区| 国产精品入口免费视| 久久久国产精品免费| 久久激情视频久久| 国产日韩在线观看av| 亚洲精品一区二区三区不| 亚洲男人的天堂在线播放| 久久久久女教师免费一区| 日韩乱码在线视频| 啊v视频在线一区二区三区| 在线观看日韩专区| 97超碰蝌蚪网人人做人人爽| 亚洲图片欧美午夜| 中文字幕欧美日韩在线| 亚洲国产精品久久久久秋霞不卡| 国产精品久久久久久中文字| 欧美专区在线观看| 亚洲国产三级网| 亚洲国产精品悠悠久久琪琪| 欧美电影免费观看电视剧大全| 亚洲日本中文字幕免费在线不卡| 久久精品最新地址| 91麻豆国产精品| 欧美丰满少妇xxxx| 一色桃子一区二区| 日韩一区二区久久久| 岛国精品视频在线播放| 中文字幕亚洲无线码a| 91精品国产91久久久久久不卡| 国产精品入口夜色视频大尺度| 97久久精品在线| 亚洲精品国产拍免费91在线| 精品电影在线观看| 欧美日韩亚洲网| 一区二区三区无码高清视频| 国产精品久久久久av免费| 国产午夜精品麻豆| 日韩日本欧美亚洲| 日本一区二区在线免费播放| 亚洲精品91美女久久久久久久| 久久久久国产精品免费网站| 精品亚洲一区二区| 日本午夜在线亚洲.国产| 亚洲国产成人精品一区二区| 国产一区视频在线| 在线精品国产欧美| 国产热re99久久6国产精品| 日韩美女免费线视频| 懂色aⅴ精品一区二区三区蜜月| 欧美激情在线视频二区| 精品成人av一区| 精品国产91久久久| 欧美性感美女h网站在线观看免费| 日韩电影免费在线观看中文字幕| 最近中文字幕2019免费| 亚洲自拍另类欧美丝袜| 欧美一级淫片aaaaaaa视频| 日韩免费观看网站| 大伊人狠狠躁夜夜躁av一区| 国产精品成人一区二区三区吃奶| 久久视频在线视频| 欧美肥婆姓交大片|