在自定义的View中绘制内容

程序开发中,常常需要完成某一个特殊效果而绘制一些内容。

下面简单说明如何在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);
			
	}

}

说明:

  1. 抗锯齿设置:mPaint.setAntiAlias(true);
  2. 设置画笔颜色:mPaint.setColor(Color.RED);
  3. 绘制背景颜色:canvas.drawColor(Color.WHITE);
  4. 绘制文字:canvas.drawText("绘制文字", 10, 20, mPaint);
  5. 绘制圆: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文件中设置):
  1. 全屏:getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
  2. 无标题栏: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>

  说明:

  1. 注意MyView中构造函数的声明,从XML文件指定的View,需要实现含有AttributeSet参数的构造函数,否则会提示错误;

效果如图:



希望对你有所帮助!:)

猜你喜欢

转载自wangleyiang.iteye.com/blog/1965533