程序开发中,常常需要完成某一个特殊效果而绘制一些内容。
下面简单说明如何在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参数的构造函数,否则会提示错误;
效果如图:
希望对你有所帮助!:)