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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android代码画出波浪球,Android绘制波浪曲线,效果很赞的。

發布時間:2023/12/2 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android代码画出波浪球,Android绘制波浪曲线,效果很赞的。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

github地址:https://github.com/sddyljsx/Android-SurfView-WaveView

package neal.canvas;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Path;

import android.graphics.RectF;

import android.util.AttributeSet;

import android.view.View;

/**

* Created by songxun.sx on 2015/8/14.

*/

public class MyView extends View {

NextFrameAction nextFrameAction;

RectF rectF;

Paint paint;

Paint paint2;

Paint paint3;

Path path;

Path path1;

int width;

int height;

int w = 0;

double startTime;

int waveAmplitude;

int waveRange;

int highLevel;

public MyView(Context context) {

super(context);

}

public MyView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public MyView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

private void init() {

nextFrameAction = new NextFrameAction();

width = getMeasuredWidth();

height = getMeasuredHeight();

waveRange = width;

rectF = new RectF(5, 5, width - 5, height - 5);

paint = new Paint();

paint2 = new Paint();

paint3=new Paint();

paint.setAntiAlias(true);

paint.setColor(Color.RED);

paint3.setAntiAlias(true);

paint3.setColor(0x99ff0000);

paint2.setAntiAlias(true);

paint2.setStyle(Paint.Style.STROKE);

paint2.setStrokeWidth(5);

paint2.setColor(Color.RED);

path = new Path();

path1 = new Path();

startTime = System.currentTimeMillis();

waveAmplitude = 20;

highLevel = (int) (height * (0.5) + waveAmplitude);

}

protected class NextFrameAction implements Runnable {

@Override

public void run() {

path.reset();

path1.reset();

path.addArc(rectF, 90.0f - 145.0f / 2.0f, 145.0f);

path1.addArc(rectF, 90.0f - 145.0f / 2.0f, 145.0f);

w += 5;

if (w >= (width - 5) * 2) {

w = 0;

}

for (int i = 5; i < width - 5; i++) {

path.lineTo(i, (float) (highLevel + waveAmplitude * Math.cos((float) (i + w) / (float) (width - 5) * Math.PI)));

path1.lineTo(i, (float) (highLevel - waveAmplitude * Math.cos((float) (i + w) / (float) (width - 5) * Math.PI)));

}

path.close();

path1.close();

invalidate();

}

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

init();

}

@Override

protected void onDraw(Canvas canvas) {

canvas.drawCircle(width / 2, height / 2, width / 2 - 5, paint2);

//canvas.drawArc(rectF,90.0f-145.0f/2.0f,145.0f,false,paint);

canvas.drawPath(path, paint);

canvas.drawPath(path1,paint3);

postDelayed(nextFrameAction, 4);

}

}

surfaceview代碼:

package neal.canvas;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Path;

import android.graphics.PixelFormat;

import android.graphics.RectF;

import android.util.AttributeSet;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import java.util.concurrent.ScheduledExecutorService;

import java.util.concurrent.ScheduledThreadPoolExecutor;

import java.util.concurrent.TimeUnit;

/**

* Created by songxun.sx on 2015/8/17.

*/

public class MyView2 extends SurfaceView implements SurfaceHolder.Callback {

SurfaceHolder surfaceHolder;

NextFrameAction nextFrameAction;

RectF rectF;

Paint paint;

Paint paint2;

Paint paint3;

Path path;

Path path1;

int width;

int height;

int w = 0;

double startTime;

int waveAmplitude;

int waveRange;

int highLevel;

Canvas canvas;

public MyView2(Context context) {

super(context);

}

public MyView2(Context context, AttributeSet attrs) {

super(context, attrs);

}

public MyView2(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

private void init() {

nextFrameAction = new NextFrameAction();

width = getMeasuredWidth();

height = getMeasuredHeight();

waveRange = width;

rectF = new RectF(5, 5, width - 5, height - 5);

paint = new Paint();

paint2 = new Paint();

paint3 = new Paint();

paint.setAntiAlias(true);

paint.setColor(Color.RED);

paint3.setAntiAlias(true);

paint3.setColor(0x99ff0000);

paint2.setAntiAlias(true);

paint2.setStyle(Paint.Style.STROKE);

paint2.setStrokeWidth(5);

paint2.setColor(Color.RED);

path = new Path();

path1 = new Path();

startTime = System.currentTimeMillis();

waveAmplitude = 20;

highLevel = (int) (height * (0.5) + waveAmplitude);

surfaceHolder = this.getHolder();

//為SurfaceHolder添加一個回調函數

surfaceHolder.addCallback(this);

setZOrderOnTop(true);//設置畫布 背景透明

surfaceHolder.setFormat(PixelFormat.TRANSLUCENT);

}

protected class NextFrameAction implements Runnable {

@Override

public void run() {

path.reset();

path1.reset();

path.addArc(rectF, 90.0f - 145.0f / 2.0f, 145.0f);

path1.addArc(rectF, 90.0f - 145.0f / 2.0f, 145.0f);

w += 5;

if (w >= (width - 5) * 2) {

w = 0;

}

for (int i = 5; i < width - 5; i++) {

path.lineTo(i, (float) (highLevel + waveAmplitude * Math.cos((float) (i + w) / (float) (width - 5) * Math.PI)));

path1.lineTo(i, (float) (highLevel - waveAmplitude * Math.cos((float) (i + w) / (float) (width - 5) * Math.PI)));

}

path.close();

path1.close();

Draw();

}

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

init();

}

protected void Draw() {

canvas = surfaceHolder.lockCanvas();

canvas.drawColor(Color.WHITE);

canvas.drawCircle(width / 2, height / 2, width / 2 - 5, paint2);

canvas.drawArc(rectF,90.0f-145.0f/2.0f,145.0f,false,paint);

canvas.drawPath(path, paint);

canvas.drawPath(path1, paint3);

surfaceHolder.unlockCanvasAndPost(canvas);

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

ScheduledExecutorService executorService= new ScheduledThreadPoolExecutor(1);

NextFrameAction nextFrameAction=new NextFrameAction();

executorService.scheduleAtFixedRate(nextFrameAction, 4, 4, TimeUnit.MILLISECONDS);

}

@Override

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

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

}

}

效果圖:

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的android代码画出波浪球,Android绘制波浪曲线,效果很赞的。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。