如果我们想要自定义View,我们可以继承View类,下面给出一个画图例子来讲解如何实现自己的View
package com.example.mycustomview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
public class TouchEventView extends View {
private Paint paint = new Paint();
private Path path = new Path();
public TouchEventView(Context context, AttributeSet attrs) {
super(context, attrs);
paint.setAntiAlias(true); //抗锯齿
paint.setColor(Color.RED); //路径的颜色
paint.setStyle(Paint.Style.STROKE); //路径的样式
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeWidth(30f); //路径的宽度
}
@Override
protected void onDraw(Canvas canvas) {
Log.d("VIEWTAG","onDraw called!");
canvas.drawPath(path, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
path.moveTo(eventX,eventY);
return true;
case MotionEvent.ACTION_MOVE:
path.lineTo(eventX, eventY);
break;
case MotionEvent.ACTION_UP:
// do nothing
break;
default:
return false;
}
//安排下一次绘画
invalidate(); //必须调用该方法去触发onDraw方法
return true;
}
}
TouchEventView类继承自View,在onDraw方法中调用了画布的方法drawPath,目的是画线。
然后我们将该View添加到我们的Activity中。
package com.example.mycustomview;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;
public class WriteOnScreenActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new TouchEventView(this, null));
}
}
当然也可以写在XML文件中,只不过需要注意的是在标签中,我们要将该类的包名加上,如:
<com.example.mycustomview.TouchEventView
android:id="@+id/myDrawView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
运行结果: