最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android SurfaceView畫板操作

 更新時(shí)間:2022年05月17日 11:21:00   作者:汪星沒有熊  
這篇文章主要為大家詳細(xì)介紹了Android SurfaceView畫板操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android SurfaceView畫板操作的具體代碼,供大家參考,具體內(nèi)容如下

畫板——畫路徑

package com.example.review.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

/**
 * 畫板畫路徑
 */
public class HuabanView extends SurfaceView implements SurfaceHolder.Callback {

 private SurfaceHolder surfaceHolder;
 private Path path = new Path();


 public HuabanView(Context context) {
  super(context);
 }

 public HuabanView(Context context, AttributeSet attrs) {
  super(context, attrs);
  surfaceHolder = getHolder();
  surfaceHolder.addCallback(this);//獲得surfaceview的生命周期
 }

 public HuabanView(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
 }

 public HuabanView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
  super(context, attrs, defStyleAttr, defStyleRes);
 }

 @Override
 public void surfaceCreated(SurfaceHolder holder) {
  new HuabanThread().start();
 }

 @Override
 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

 }

 @Override
 public void surfaceDestroyed(SurfaceHolder holder) {

 }

 @Override
 public boolean onTouchEvent(MotionEvent event) {
  float x = event.getX();
  float y = event.getY();
  int action = event.getAction();
  if (action == MotionEvent.ACTION_DOWN) {//按下
   path.moveTo(x, y);
  } else if (action == MotionEvent.ACTION_MOVE) {//移動(dòng)
   path.lineTo(x, y);
  }
  return true;
 }

 class HuabanThread extends Thread {
  @Override
  public void run() {
   super.run();
   //TODO:畫筆
   Paint paint = new Paint();
   paint.setColor(Color.BLACK);
   paint.setStrokeWidth(20);
   paint.setStyle(Paint.Style.STROKE);
   paint.setAntiAlias(true);
   //TODO:畫布
   while (true) {
    Canvas canvas = surfaceHolder.lockCanvas();
    //避免空指針
    if (canvas == null){
     return;
    }
    canvas.drawColor(Color.WHITE, PorterDuff.Mode.CLEAR);
    canvas.drawColor(Color.WHITE);
    canvas.drawPath(path,paint);
    surfaceHolder.unlockCanvasAndPost(canvas);
   }
  }
 }
 public void close(){
  path.reset();
 }
}

畫板——畫動(dòng)態(tài)直線

package com.example.review.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

/**
 * 畫板畫路徑
 * 畫動(dòng)態(tài)直線
 */
public class LineView extends SurfaceView implements SurfaceHolder.Callback {

 private SurfaceHolder surfaceHolder;
 private Path path = new Path();
 private int x = 0;

 public LineView(Context context) {
  super(context);
 }

 public LineView(Context context, AttributeSet attrs) {
  super(context, attrs);
  surfaceHolder = getHolder();
  surfaceHolder.addCallback(this);//獲得surfaceview的生命周期
 }

 public LineView(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
 }

 public LineView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
  super(context, attrs, defStyleAttr, defStyleRes);
 }

 @Override
 public void surfaceCreated(SurfaceHolder holder) {
  new HuabanThread().start();
 }

 @Override
 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

 }

 @Override
 public void surfaceDestroyed(SurfaceHolder holder) {

 }

 class HuabanThread extends Thread {
  @Override
  public void run() {
   super.run();
   //TODO:畫筆
   Paint paint = new Paint();
   paint.setColor(Color.BLACK);
   paint.setStrokeWidth(20);
   paint.setStyle(Paint.Style.STROKE);
   paint.setAntiAlias(true);
   //TODO:畫布
   while (true) {
    Canvas canvas = surfaceHolder.lockCanvas();
    //避免空指針
    if (canvas == null){
     return;
    }
    canvas.drawColor(Color.WHITE, PorterDuff.Mode.CLEAR);
    canvas.drawColor(Color.WHITE);
    canvas.drawLine(0,100,x++,100,paint);
    surfaceHolder.unlockCanvasAndPost(canvas);
   }
  }
 }

 public void close(){
  path.reset();
 }

}

基本圖形

//圓
canvas.drawOval(50,100,150,200,paint);
//半圓
canvas.drawArc(500,500,700,700,20,180,true,paint);
//矩形
canvas.drawRect(100,300,250,400,paint);
//三角形
canvas.drawLine(100,450,0,600,paint);
canvas.drawLine(0,600,400,600,paint);
canvas.drawLine(100,450,400,600,paint);
//梯形
canvas.drawLine(100,700,200,700,paint);
canvas.drawLine(100,700,0,900,paint);
canvas.drawLine(0,900,400,900,paint);
canvas.drawLine(200,700,400,900,paint);

//文字
canvas.drawText("截圖",100,1000,paint);

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android中使用ZXing生成二維碼(支持添加Logo圖案)

    Android中使用ZXing生成二維碼(支持添加Logo圖案)

    ZXing是谷歌的一個(gè)開源庫,可以用來生成二維碼、掃描二維碼。接下來通過本文給大家介紹Android中使用ZXing生成二維碼(支持添加Logo圖案),需要的朋友參考下
    2017-01-01
  • Jetpack?Compose?分步指南教程詳解

    Jetpack?Compose?分步指南教程詳解

    這篇文章主要為大家介紹了Jetpack?Compose?分步指南教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Android ListView仿微信聊天界面

    Android ListView仿微信聊天界面

    這篇文章主要為大家詳細(xì)介紹了ListView仿微信聊天界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Kotlin Service實(shí)現(xiàn)消息推送通知過程

    Kotlin Service實(shí)現(xiàn)消息推送通知過程

    這幾天分析了一下的啟動(dòng)過程,于是乎,今天寫一下Service使用; 給我的感覺是它并不復(fù)雜,千萬不要被一坨一坨的代碼嚇住了,雖然彎彎繞繞不少,重載函數(shù)一個(gè)接著一個(gè),就向走迷宮一樣,但只要抓住主線閱讀,很快就能找到出口
    2022-12-12
  • Android開發(fā)中實(shí)現(xiàn)應(yīng)用的前后臺切換效果

    Android開發(fā)中實(shí)現(xiàn)應(yīng)用的前后臺切換效果

    這篇文章主要介紹了Android開發(fā)中實(shí)現(xiàn)應(yīng)用的前后臺切換效果的方法,文章最后還附帶了監(jiān)聽程序是否進(jìn)入后臺的判斷方法,需要的朋友可以參考下
    2016-02-02
  • Android編程之退出整個(gè)應(yīng)用程序的方法

    Android編程之退出整個(gè)應(yīng)用程序的方法

    這篇文章主要介紹了Android編程之退出整個(gè)應(yīng)用程序的方法,實(shí)例分析了Android直接關(guān)閉所有的Acitivity并退出應(yīng)用程序的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-12-12
  • Android項(xiàng)目中使用Eclipse導(dǎo)出jar文件的操作方法

    Android項(xiàng)目中使用Eclipse導(dǎo)出jar文件的操作方法

    文章講述了如何使用Eclipse將Android項(xiàng)目打包成jar文件,并詳細(xì)解答了在打包過程中遇到的問題,如如何處理依賴的jar或library,以及如何解決在其他項(xiàng)目中引用時(shí)出現(xiàn)的NoClassDefFoundError錯(cuò)誤
    2025-02-02
  • 詳解Android OkHttp完全解析

    詳解Android OkHttp完全解析

    本篇文章主要介紹了Android OkHttp完全解析,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • Android 數(shù)據(jù)庫SQLite 寫入SD卡的方法

    Android 數(shù)據(jù)庫SQLite 寫入SD卡的方法

    如果手機(jī)沒有root,數(shù)據(jù)庫文件是無法查看到的,不方便調(diào)試。最好的辦法是把數(shù)據(jù)庫寫進(jìn)SD卡。通過本文給大家介紹Android 數(shù)據(jù)庫SQLite 寫入SD卡的方法,需要的朋友參考下吧
    2016-04-04
  • Android自定義彈出框dialog效果

    Android自定義彈出框dialog效果

    這篇文章主要為大家詳細(xì)介紹了Android自定義彈出框dialog效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評論

鹤山市| 庄河市| 延边| 得荣县| 漯河市| 南陵县| 含山县| 建湖县| 岳池县| 新宁县| 鄂托克旗| 潜山县| 鄂托克旗| 家居| 达日县| 尼木县| 澄城县| 炎陵县| 兴安县| 金溪县| 中宁县| 衡阳县| 油尖旺区| 江门市| 综艺| 莱州市| 禹州市| 墨玉县| 二连浩特市| 通州区| 六安市| 光山县| 同心县| 靖宇县| 乌兰浩特市| 梨树县| 广德县| 屏南县| 苏州市| 吴桥县| 浪卡子县|