这个实例是自定的view的初步介绍,要设计的是一个随着手指运动的小球。原理是随时获取手指的坐标,然后在这个坐标上面实时改变自定义view的坐标。这个view仅仅是画了一个圆形而已。
自定义的view
DrawView.java
package com.kale.drawview;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;public class DrawView extends View{ public float currentX = 60; public float currentY = 60; //定义,创建画笔 Paint paint = new Paint(); public DrawView (Context context) { super(context); } public DrawView(Context context,AttributeSet set) { super(context,set); } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); //设置画笔颜色 paint.setColor(Color.RED); //绘制一个小圆 canvas.drawCircle(currentX, currentY, 50, paint); } // 为该组件的触碰时间2重写处理的方法 @Override public boolean onTouchEvent(MotionEvent event) { // 修改坐标 currentX = event.getX(); currentY = event.getY(); // 通知组件,重新绘制自己 invalidate(); // 返回true表明该方法已经处理该事件 return true; } }
布局文件
当然,我们也可以不用布局文件,直接在代码中把自定义控件放入layout中
package com.kale.drawview;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.RelativeLayout;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* RelativeLayout root = (RelativeLayout)findViewById(R.id.root_relativeLayout_id); final DrawView drawView = new DrawView(this); //設置組件的最大寬度 drawView.setMinimumHeight(300); drawView.setMinimumWidth(500); root.addView(drawView);*/ }}