SurfaceView绘制音乐柱形图
来源:互联网 发布:免费流量软件 移动 编辑:程序博客网 时间:2024/05/19 02:03
SurfaceView 绘制时:先走onMeasre方法,在走SurfaceHolder.Callback的surfaceCreated(SurfaceView在创建时系统回掉方法,做一些初始化),在走surfaceDestroyed(SirfaceView在销毁时回掉的方法,在这个方法里可以做一些结束任务的操作)。
package com.sxwdsoft.widget;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.util.AttributeSet;import android.util.DisplayMetrics;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.WindowManager;import java.util.ArrayList;import java.util.List;import java.util.Random;public class AnalysisBarChartingView extends SurfaceView implements SurfaceHolder.Callback, Runnable { /** * 屏幕的大小 */ private int width, height; /** * view的大小 */ private int viewWidth, viewHeight;private SurfaceHolder holder;//这个对象可以在线程里异步操作获取的canvas对象。 private Integer[] origin; private int lineWidth = 1; private boolean running = false; private int gridWidth = 40; private int space = 20; private String[] bgs = {"#FFD39B", "#EEB422", "#E0FFFF", "#919191"}; private int[] itemBg = {Color.BLACK, Color.BLUE, Color.DKGRAY, Color.GREEN}; public AnalysisBarChartingView(Context context) { super(context); init(context); } public AnalysisBarChartingView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public AnalysisBarChartingView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } private void init(Context context) { DisplayMetrics metrics = new DisplayMetrics(); WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); manager.getDefaultDisplay().getMetrics(metrics); width = metrics.widthPixels; height = metrics.heightPixels; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); viewWidth = getDefaultSize(width, widthMeasureSpec); viewHeight = getDefaultSize(height, heightMeasureSpec); holder = getHolder(); holder.addCallback(this); } @Override public void surfaceCreated(SurfaceHolder holder) { origin = new Integer[]{10, (viewHeight - 10)}; Rect r = new Rect(0, 0, viewWidth, viewHeight); Canvas canvas = holder.lockCanvas(r); canvas.drawColor(Color.parseColor("#CFCFCF")); Paint p = new Paint(); p.setAntiAlias(true); p.setColor(Color.RED); p.setStrokeWidth(lineWidth); canvas.drawLine(origin[0], 5, origin[0], origin[1], p); canvas.drawLine(origin[0], origin[1], viewWidth - origin[0], viewHeight - origin[0], p); holder.unlockCanvasAndPost(canvas); new Thread(this).start(); running = true; } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { running = false; } @Override public void run() { int num = (viewWidth - origin[0]) / (space + gridWidth); List<Rect> rects = new ArrayList<>(); List<Paint> paints = new ArrayList<>(); int startX = origin[0], startY = origin[1], endX = origin[0], endY = origin[1]; for (int i = 0; i < num; i++) { startX = (space * (i + 1) + gridWidth * i); endX = ((space + gridWidth) * (i + 1)); rects.add(new Rect(startX, startY, endX, endY)); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setStyle(Paint.Style.FILL); paint.setColor(itemBg[Math.abs(new Random().nextInt(itemBg.length))]); paints.add(paint); } while (running) { Random random = new Random(); Canvas canvas = holder.lockCanvas(new Rect(origin[0], origin[0], viewWidth - origin[0], origin[1])); canvas.drawColor(Color.parseColor(bgs[Math.abs(new Random().nextInt(bgs.length))])); for (int i = 0; i < num; i++) { int y = Math.abs(random.nextInt(origin[1])); while (y < origin[0]||y>origin[1]/2) y = Math.abs(random.nextInt(origin[1])); Log.i("asd", "y=" + y); Rect rect = rects.get(i); rect.top = y; canvas.drawRect(rect, paints.get(i)); } holder.unlockCanvasAndPost(canvas); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }}
0 0
- SurfaceView绘制音乐柱形图
- Android SurfaceView绘制
- SurfaceView绘制曲线
- android:SurfaceView绘制图形
- 用SurfaceView绘制正弦曲线
- Android SurfaceView绘制组合图形
- Android SurfaceView绘制组合图形
- SurfaceView预览Camera+GLSurfaceView绘制
- android--(绘制几何图形、图片、surfaceView)
- Android利用SurfaceView绘制正弦曲线
- Android 基于surfaceView绘制正弦曲线
- Android SurfaceView的绘制详解
- Surfaceview的绘制与应用
- 用 Python 绘制音乐图谱
- 用 Python 绘制音乐图谱
- Android-使用SurfaceView多线程绘制动画
- Android 利用SurfaceView进行图形绘制
- 利用surfaceview和path绘制雨伞图形
- 深入研究java.lang.Runtime类
- Gradle编译Volley的Jar包及问题解决
- Servlet 实例hello world
- jQuery-easyUI的使用:combobox实现联动选择及自动搜索
- Andorid读写全局配置文件的方法
- SurfaceView绘制音乐柱形图
- 一个登录的功能
- Leetcode129: Combination Sum II
- 机器学习(十四)SVM总结
- eclipse导入Android项目报错的解决方法
- iwpriv
- sqlite3自增key设定(创建自增字段)
- 解决nginx + lua 上传文件问题
- extern用法详解(转)