Android开发之自定义SurfaceView绘制动效音波图 | 动效音阶图 | Android自定义View

老套路献上图:

 

第一张是通过播放歌曲拿到歌曲播放的数据进行动态展示的

第二张是通过定时器随机生成的数据动态展示的

先说下这个自定义view也不难很简单,就是绘制矩形,唯一的难点在于计算矩形的坐标

说下矩形的计算思路:

第一步先判断是不是第一个矩形,如果是第一个,那么第一个矩形的左边距就等于=0或者你需要设置的左边距即可,右边距就等于=左边距+矩形的宽度+2个矩形的间距

      rect = new Rect();
      if (newData.size() == 0) {
      rect.left = 35;
        } else {
            rect.left = newData.get(newData.size() - 1).right + rectSpace;
}
        rect.right = rect.left + rectWidth + rectSpace;

第二步判断非0个矩形,那么左边距就等于上一一个的右边距+2个矩形之间的间距代码如上

高度好说动态设置就好,top直接设置动态,bottom直接是固定的值

         rect.top = 720 - datum * 3;
         rect.bottom = 720;

拿到矩形数据后添加到集合中然后开始绘制矩形即可

 private void drawRectContent(List<Rect> newData) {
        Canvas canvas = surfaceHolder.lockCanvas();
        if (null != canvas) {
            for (int i = 0; i < newData.size(); i++) {
                if (i == 0) {
                    //每次绘制第一个的时候需要清空下画布
                    canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
                }
                canvas.drawRect(newData.get(i), paint);
            }
            surfaceHolder.unlockCanvasAndPost(canvas);
        }
    }

看下SurfaceView完整代码吧

package cn.yhsh.surfaceviewmodel.view;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Android绘制自定义可以通过以下步骤实现: 1. 获取地数据:首先,需要获取自定义的数据,这可以是由地提供者提供的矢量数据、栅格数据或者是在地编辑器中创建的自定义层。 2. 解析地数据:将获取到的地数据解析成可以在Android绘制的格式。这可能涉及到解析矢量数据、转换像数据格式或者解析自定义文件格式。 3. 创建自定义绘制:在Android中,我们可以使用自定义绘制来实现绘制自定义。通过继承View类或者SurfaceView类,并重写相应绘制方法(如onDraw方法),可以在画布上绘制数据。 4. 绘制数据:在自定义绘制中,通过使用Canvas对象和Paint工具等工具,可以将解析好的地数据绘制到画布上。根据需求,可以自定义的样式、颜色、线条粗细等。 5. 处理地交互:在绘制的同时,还可以处理一些地交互操作,例如实现点击地位置获取地理坐标、实现地缩放和平移等操作。可以通过添加触摸事件监听器来实现相应的交互处理。 6. 更新地数据:如果自定义需要动态更新,可以根据需要实现数据更新的逻辑,例如定期从服务器获取最新地数据,并重新解析和绘制。 7. 优化性能:在绘制自定义时,需要考虑性能优化,避免频繁的绘制操作导致卡顿。可以使用缓存技术、合并绘制操作、使用硬件加速等手段来提高绘制效率。 总之,Android绘制自定义的关键是获取并解析地数据,然后通过自定义绘制来展示地数据,并处理相应的地交互操作。 ### 回答2: Android绘制自定义可以通过以下步骤实现: 1. 准备地数据:首先需要获取自定义数据,可以是地的矢量数据或者片,如SVG格式的矢量地或者PNG格式的片地。可以从地提供商获取或者自行制作。 2. 绘制背景:在Android的绘环境Canvas上创建一个画布,并且使用地背景色填充整个画布。 3. 坐标转换:根据地数据和设备屏幕的尺寸,将坐标进行转换,使得地上的坐标点对应到屏幕上的实际像素点。 4. 绘制要素:根据地数据,将地要素逐个绘制到画布上,如绘制的道路、河流、建筑等等。可以借助Android的Canvas来完成这些绘制操作,如使用画笔设置颜色、线宽等属性,使用路径(Path)来绘制直线、曲线,使用矩形(Rect)来绘制建筑等等。 5. 绘制标注和标:根据需要,在地绘制标注和标,如标记地点的名称、行政区划边界、POI点等等。可以使用Canvas的文本绘制功能来绘制标注的文本,可以使用Bitmap来绘制标。 6. 交互操作:可以通过触摸事件来实现对地的交互操作,如放大、缩小、平移地等。可以根据用户的操作,重新计算地的显示范围并更新画布上的绘制内容。 7. 地样式和主题:可以根据需求自定义的样式和主题,如修改地要素的颜色、线宽、字体等属性,调整地的显示效果。 绘制自定义需要有一定的绘技巧和地理知识,同时需要理解Android的绘原理和API。通过上述步骤,可以实现在Android应用中绘制自定义的地,满足特定需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值