android 绘制一段正弦函数图
时间: 2023-05-03 14:03:45 浏览: 169
Android 提供了 Canvas 和 Paint 两个类,可用于绘制 2D 图形。在绘制正弦函数图时,需要使用 Canvas 绘制坐标系和曲线,使用 Paint 设置线条颜色和宽度。
首先,在 XML 文件中定义一个自定义 view:
```xml
<com.example.sinewave.view.SinWaveView
android:layout_width="match_parent"
android:layout_height="match_parent" />
```
然后,在 SinWaveView 的 onDraw() 方法中实现绘制:
```java
public class SinWaveView extends View {
private Paint mPaint;
private Path mPath;
private int mWidth;
private int mHeight;
private float mMinX;
private float mMaxX;
private float mUnitX;
private float mAmplitude;
private float mFrequency;
private float mPhase;
public SinWaveView(Context context) {
super(context);
init(context);
}
public SinWaveView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context) {
mPaint = new Paint();
mPath = new Path();
mWidth = getWidth();
mHeight = getHeight();
mMinX = 0;
mMaxX = 4 * (float) Math.PI;
mUnitX = (mMaxX - mMinX) / mWidth;
mAmplitude = mHeight / 4;
mFrequency = 1 / (2 * (float) Math.PI);
mPhase = 0;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPaint.setStrokeWidth(5);
mPaint.setAntiAlias(true);
mPaint.setColor(Color.BLUE);
float x = mMinX;
float y = (float) (mAmplitude * Math.sin(mFrequency * x - mPhase)) + mHeight / 2;
mPath.moveTo(0, y);
while (x < mMaxX) {
x += mUnitX;
y = (float) (mAmplitude * Math.sin(mFrequency * x - mPhase)) + mHeight / 2;
mPath.lineTo(x, y);
}
canvas.drawPath(mPath, mPaint);
}
}
```
在 SinWaveView 的构造函数中,初始化 Paint 和 Path 对象,以及一些绘制用的参数。onDraw() 方法中,设置 Paint 的属性,然后遍历绘制正弦函数图的路径,并使用 drawPath() 方法将其绘制到 Canvas 上。
这样,就可以绘制一段正弦函数图了。可以通过修改绘制用的参数,调整正弦函数图的形态。