日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

android显示绘图动画,Android自定义View绘图实现渐隐动画

發(fā)布時(shí)間:2023/12/2 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android显示绘图动画,Android自定义View绘图实现渐隐动画 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

實(shí)現(xiàn)了一個(gè)有趣的小東西:使用自定義view繪圖,一邊畫線,畫出的線條漸漸變淡,直到消失。效果如下圖所示:

用屬性動(dòng)畫或者漸變填充(shader)可以做到一筆一筆的變化,但要想一筆漸變(手指不抬起邊畫邊漸隱),沒在android中找到現(xiàn)成的api可用。所以,自己做了一個(gè)。

基本的想法是這樣的:

?在view的ontouchevent中記錄觸摸點(diǎn),生成一條一條的線lineelement,放在一個(gè)list中。給每個(gè)lineelement配置一個(gè)paint實(shí)例。

?在ondraw中繪制線段。

?變換lineelement的paint實(shí)例的alpha值。

?根據(jù)alpha值重組線段列表

別的不說了,上代碼:

package com.example.disappearinglines;

import android.content.context;

import android.graphics.canvas;

import android.graphics.paint;

import android.graphics.path;

import android.graphics.rectf;

import android.os.handler;

import android.os.message;

import android.os.systemclock;

import android.support.annotation.nonnull;

import android.util.attributeset;

import android.util.log;

import android.view.motionevent;

import android.view.view;

import java.util.arraylist;

import java.util.collection;

import java.util.iterator;

import java.util.list;

import java.util.listiterator;

public class disappearingdoodleview extends view {

final static string tag = "doodleview";

class lineelement {

static final public int alpha_step = 5;

static final public int subpath_dimension = 8;

public lineelement(){

mpaint = new paint();

mpaint.setargb(255, 255, 0, 0);

mpaint.setantialias(true);

mpaint.setstrokewidth(16);

mpaint.setstrokecap(paint.cap.butt);

mpaint.setstyle(paint.style.stroke);

}

public lineelement(paint paint){

mpaint = paint;

}

public void setpaint(paint paint){

mpaint = paint;

}

public void setalpha(int alpha){

mpaint.setalpha(alpha);

}

public float mstartx = -1;

public float mstarty = -1;

public float mendx = -1;

public float mendy = -1;

public paint mpaint;

}

private lineelement mcurrentline = null;

private list mlines = null;

private long melapsed = 0;

private handler mhandler = new handler(){

@override

public void handlemessage(message msg){

disappearingdoodleview.this.invalidate();

}

};

public disappearingdoodleview(context context){

super(context);

}

public disappearingdoodleview(context context, attributeset attrs){

super(context, attrs);

}

@override

protected void ondraw(canvas canvas){

melapsed = systemclock.elapsedrealtime();

if(mlines != null) {

for (lineelement e : mlines) {

if(e.mstartx < 0 || e.mendy < 0) continue;

canvas.drawline(e.mstartx, e.mstarty, e.mendx, e.mendy, e.mpaint);

}

compactpaths();

}

}

@override

public boolean ontouchevent(motionevent event){

float x = event.getx();

float y = event.gety();

int action = event.getaction();

if(action == motionevent.action_up){// end one line after finger release

mcurrentline.mendx = x;

mcurrentline.mendy = y;

mcurrentline = null;

invalidate();

return true;

}

if(action == motionevent.action_down){

mcurrentline = new lineelement();

addtopaths(mcurrentline);

mcurrentline.mstartx = x;

mcurrentline.mstarty = y;

return true;

}

if(action == motionevent.action_move) {

mcurrentline.mendx = x;

mcurrentline.mendy = y;

mcurrentline = new lineelement();

addtopaths(mcurrentline);

mcurrentline.mstartx = x;

mcurrentline.mstarty = y;

}

if(mhandler.hasmessages(1)){

mhandler.removemessages(1);

}

message msg = new message();

msg.what = 1;

mhandler.sendmessagedelayed(msg, 0);

return true;

}

private void addtopaths(lineelement element){

if(mlines == null) {

mlines = new arraylist() ;

}

mlines.add(element);

}

public void compactpaths(){

int size = mlines.size();

int index = size - 1;

if(size == 0) return;

int basealpha = 255 - lineelement.alpha_step;

int itselfalpha;

lineelement line;

for(; index >=0 ; index--, basealpha -= lineelement.alpha_step){

line = mlines.get(index);

itselfalpha = line.mpaint.getalpha();

if(itselfalpha == 255){

if(basealpha <= 0){

++index;

break;

}

line.setalpha(basealpha);

}else{

itselfalpha -= lineelement.alpha_step;

if(itselfalpha <= 0){

++index;

break;

}

line.setalpha(itselfalpha);

}

}

if(index >= size){

// all sub-path should disappear

mlines = null;

}

else if(index >= 0){

//log.i(tag, "compactpaths from " + index + " to " + (size - 1));

mlines = mlines.sublist(index, size);

}else{

// no sub-path should disappear

}

long interval = 40 - systemclock.elapsedrealtime() + melapsed;

if(interval < 0) interval = 0;

message msg = new message();

msg.what = 1;

mhandler.sendmessagedelayed(msg, interval);

}

}

這個(gè)示例還可以添加一些效果,比如讓線條一邊變淡一邊變細(xì)。

目前還有一些問題,線條粗的話,可以明顯看到線段與線段之間有縫隙或裂口,哪位想到怎么優(yōu)化?

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持萬仟網(wǎng)。

總結(jié)

以上是生活随笔為你收集整理的android显示绘图动画,Android自定义View绘图实现渐隐动画的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲国产第一 | 亚洲AV无码乱码国产精品色欲 | 国产午夜精品视频 | 免费网站黄色 | 亚洲影院一区二区三区 | 色呦呦中文字幕 | 免费观看视频一区二区 | 成人在线播放网站 | 国产欧美一区二区三区免费看 | 久久久亚洲av波多野结衣 | 亚洲最大av网站 | 少妇性色av | 香蕉视频国产在线观看 | 午夜在线观看免费视频 | 国产精品久久久精品三级 | 亚洲熟女乱色综合亚洲av | 色呦网站 | 精品69| 老熟妇一区二区三区啪啪 | 超碰成人免费电影 | 午夜性生活视频 | 波多野42部无码喷潮在线 | 嫩草在线视频 | 亚洲一区二区免费电影 | 日韩一本在线 | 亚洲高清在线观看视频 | 国产偷人妻精品一区二区在线 | 亚洲国产日韩a在线播放性色 | 欧美精产国品一二三 | av国语| 日韩中文字幕二区 | 教练含着她的乳奶揉搓揉捏动态图 | 啪啪网站大全 | www四虎 | 亚洲精选在线观看 | 人人艹人人| xx99小雪 | 久久久久亚洲国产 | 久久片| www视频在线免费观看 | 综合色婷婷一区二区亚洲欧美国产 | 国产三级视频在线播放 | 中文字幕亚洲天堂 | 在线国产中文字幕 | 视频在线观看一区二区三区 | 538国产精品一区二区 | 中国肥胖女人真人毛片 | 色婷婷综合久久久中文字幕 | 色婷婷a| √天堂8资源中文在线 | 国产77777| 久久久人妻无码一区二区 | 91日批视频 | 欧美女人交配视频 | 黄频在线播放 | 一道本久在线中文字幕 | 一本大道东京热无码aⅴ | 国产性猛交96 | 美日韩在线 | 在线免费看av片 | 国产福利在线观看视频 | 性活交片大全免费看 | 午夜宅男网 | 国产视频在线免费观看 | 色眯眯网 | 欧美老女人性生活视频 | 免费看黄色片的网站 | 伊人av在线播放 | 午夜视频1000| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 午夜香蕉视频 | 亚洲男女 | 日韩av无码一区二区三区 | 四色成人 | 色屋在线 | 免费黄色a| www免费黄色 | 欧美tv| 亚洲成人天堂 | 亚洲欧美国产视频 | 天堂伊人 | 在线观看 亚洲 | 男生和女生一起搞鸡 | 欧美激情在线 | 欧美一级淫片免费 | 中文字幕视频在线 | 国产三级按摩推拿按摩 | 日本三级黄色录像 | 国产欧美一区二区精品性色 | 一区国产在线 | 日本高清黄色 | 欧美亚洲在线播放 | 欧美日韩八区 | 悠悠色综合 | 原创少妇半推半就88av | 黄色xxxxx| 国产二区自拍 | 国产成人在线视频 | 中文字幕+乱码+中文乱 |