android 在简单画图的基本过程,解释invalidate方法的作用和使用方式
时间: 2023-05-18 20:02:34 浏览: 191
在 Android 中,简单画图的基本过程包括以下步骤:
1. 创建一个自定义的 View 类,继承自 View 或其子类。
2. 在 View 类中重写 onDraw 方法,实现具体的绘图操作。
3. 在需要更新绘图的时候,调用 View 的 invalidate 方法,触发 View 的重绘。
invalidate 方法的作用是通知系统,当前 View 需要重新绘制。系统会在下一次绘制周期中调用 View 的 onDraw 方法,重新绘制 View。invalidate 方法有多个重载形式,可以指定重绘的区域、延迟重绘等参数。
使用方式如下:
view.invalidate(); // 通知系统重绘整个 View
view.invalidate(left, top, right, bottom); // 通知系统重绘指定区域
view.postInvalidate(); // 在非 UI 线程中通知系统重绘整个 View
view.postInvalidate(left, top, right, bottom); // 在非 UI 线程中通知系统重绘指定区域
注意:invalidate 方法只是通知系统需要重绘,具体的重绘时间和方式由系统决定,不一定会立即生效。如果需要立即重绘,可以调用 View 的 invalidate 方法后立即调用 View 的 draw 方法,手动触发重绘。
相关问题
Android中onDraw方法是如何画图的
在Android中,onDraw方法是View的一个回调方法,用于绘制该View的内容。当View需要绘制时,系统会自动调用该方法。以下是onDraw方法如何画图的步骤:
1. 创建一个Canvas对象。Canvas是一个画布,用于绘制图形。
2. 在Canvas对象上绘制各种图形,如线条、矩形、圆形等。可以使用Paint对象设置画笔的属性,如颜色、线条宽度等。
3. 可以在Canvas对象上绘制文本、图片等其他类型的图形。
4. 绘制完成后,调用invalidate()方法通知系统重新绘制该View。
示例代码:
```java
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setStrokeWidth(5);
// 绘制一条直线
canvas.drawLine(0, 0, 100, 100, paint);
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.FILL);
// 绘制一个矩形
canvas.drawRect(120, 0, 220, 100, paint);
paint.setColor(Color.GREEN);
paint.setTextSize(50);
// 绘制文本
canvas.drawText("Hello, World!", 0, 200, paint);
// 绘制图片
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
canvas.drawBitmap(bitmap, 0, 300, paint);
}
```
使用MPAndroidChart 的2.15版本画图 画图案例
以下是一个使用MPAndroidChart 2.15绘制柱状图的示例:
1. 添加依赖项
在项目的build.gradle文件中添加以下依赖项:
```groovy
dependencies {
implementation 'com.github.PhilJay:MPAndroidChart:v2.2.5'
}
```
2. 在布局文件中添加ChartView
```xml
<com.github.mikephil.charting.charts.BarChart
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="match_parent" />
```
3. 在Activity或Fragment中设置数据并绘制图表
```java
public class MainActivity extends AppCompatActivity {
private BarChart mChart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mChart = findViewById(R.id.chart);
// 设置图表属性
mChart.setDrawGridBackground(false);
mChart.getDescription().setEnabled(false);
mChart.getLegend().setEnabled(false);
// 设置X轴属性
XAxis xAxis = mChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setDrawGridLines(false);
// 设置Y轴属性
YAxis yAxis = mChart.getAxisLeft();
yAxis.setDrawGridLines(false);
yAxis.setDrawLabels(false);
// 设置数据
List<BarEntry> entries = new ArrayList<>();
entries.add(new BarEntry(0, 5));
entries.add(new BarEntry(1, 7));
entries.add(new BarEntry(2, 3));
entries.add(new BarEntry(3, 9));
entries.add(new BarEntry(4, 6));
entries.add(new BarEntry(5, 4));
BarDataSet dataSet = new BarDataSet(entries, "Label");
dataSet.setColor(Color.BLUE);
BarData barData = new BarData(dataSet);
mChart.setData(barData);
// 绘制图表
mChart.invalidate();
}
}
```
这个示例创建了一个柱状图,其中X轴显示0到5的数字,Y轴没有标签。数据集包含6个条目,每个条目都表示x和y坐标。然后将数据集添加到BarData对象中,并将其设置为图表的数据。最后,使用`invalidate()`方法刷新图表。
阅读全文