程序开发中,常常需要完成某一个特殊效果而绘制一些内容。
下面简单说明如何在View中绘制简单内容并显示出来。
在自定义的View中绘制内容,主要是在onDraw方法中添加绘图操作。如果Paint可以共享,不妨把它放到类变量里面去,具体参考如下:
public class MyView extends View {
private Paint mPaint;
private void initial() {
mPaint = new Paint();
mPaint.setAntiAlias(true);
this.setKeepScreenOn(true);
mPaint.setColor(Color.RED);
}
public MyView(Context context) {
super(context);
initial();
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
initial();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
canvas.drawText("绘制文字", 10, 20, mPaint);
canvas.drawCircle(35, 50, 20, mPaint);
}
}
说明:
- 抗锯齿设置:mPaint.setAntiAlias(true);
- 设置画笔颜色:mPaint.setColor(Color.RED);
- 绘制背景颜色:canvas.drawColor(Color.WHITE);
- 绘制文字:canvas.drawText("绘制文字", 10, 20, mPaint);
- 绘制圆:canvas.drawCircle(35, 50, 20, mPaint);
开发文档对参数的讲解比较详细,在此不赘述!
下面看看如何显示到界面上,分别从代码和XML文件两个方面简单说明。
1、代码引用
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(new MyView(this));
}
}
为了更好的看到坐标的相对关系,这里通过代码设置了全屏和无标题栏(也可以从Manifest文件中设置):
- 全屏:getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
- 无标题栏:requestWindowFeature(Window.FEATURE_NO_TITLE);
2、XML文件引用
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.test.MyView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
说明:
- 注意MyView中构造函数的声明,从XML文件指定的View,需要实现含有AttributeSet参数的构造函数,否则会提示错误;
效果如图:
希望对你有所帮助!:)