参考《Android疯狂讲义》(第三版)2.1。
核心代码:自定义View类——继承View,重写OnDraw(Canvas canvas)和onTouchEvent(MotionEvent event)两个方法。
1 package yuhao.user_defined_view.ui; 2 import android.content.Context; 3 import android.graphics.Canvas; 4 import android.graphics.Color; 5 import android.graphics.Paint; 6 import android.util.AttributeSet; 7 import android.view.MotionEvent; 8 import android.view.View; 9 /** 10 * Created by Yuhao on 2016/10/11. 11 */ 12 public class View_BallMoveFollowFinger extends View { 13 public float currentX = 40; 14 public float currentY = 50; 15 //定义并创建画笔 16 Paint paint = new Paint(); 17 public View_BallMoveFollowFinger(Context context){ 18 super(context); 19 } 20 public View_BallMoveFollowFinger(Context context, AttributeSet set){ 21 super(context, set); 22 } 23 @Override 24 protected void onDraw(Canvas canvas) { 25 super.onDraw(canvas); 26 //设置画笔颜色 27 paint.setColor(Color.GREEN); 28 canvas.drawCircle(currentX, currentY, 30, paint); 29 } 30 @Override 31 public boolean onTouchEvent(MotionEvent event) { 32 //修改currentX, currentY的值 33 currentX = event.getX(); 34 currentY = event.getY(); 35 //通知当前组件重绘自身 36 invalidate(); 37 //返回true表明该处理方法已经处理该事件 38 return true; 39 } 40 }
自定义符合我们所需功能的View后,其它用法与我们常用的TextView、Button等类似。在XML加入自定义View组件如下(15-17行):
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:id="@+id/activity_ball_move_follow_finger" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 android:paddingBottom="@dimen/activity_vertical_margin" 8 android:paddingLeft="@dimen/activity_horizontal_margin" 9 android:paddingRight="@dimen/activity_horizontal_margin" 10 android:paddingTop="@dimen/activity_vertical_margin" 11 android:orientation="vertical" 12 tools:context="yuhao.user_defined_view.BallMoveFollowFinger"> 13 <!-- 加入自定义组件 --> 14 <yuhao.user_defined_view.ui.View_BallMoveFollowFinger 15 android:layout_width="match_parent" 16 android:layout_height="match_parent" /> 17 </LinearLayout>
如果不在XML中引入,我们也可以通过JAVA代码添加:
1 package yuhao.user_defined_view; 2 import android.support.v7.app.AppCompatActivity; 3 import android.os.Bundle; 4 import android.widget.LinearLayout; 5 import yuhao.user_defined_view.ui.View_BallMoveFollowFinger; 6 public class BallMoveFollowFinger extends AppCompatActivity { 7 @Override 8 protected void onCreate(Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout.activity_ball_move_follow_finger); 11 //以下为不在布局中加入自定义组件而在Java代码中添加的方法 12 LinearLayout ll_bmff = (LinearLayout) findViewById(R.id.activity_ball_move_follow_finger); 13 //创建View_BallMoveFollowFinger组件并设置最小高宽 14 View_BallMoveFollowFinger view_ballMoveFollowFinger = new View_BallMoveFollowFinger(this); 15 view_ballMoveFollowFinger.setMinimumHeight(300); 16 view_ballMoveFollowFinger.setMinimumWidth(500); 17 //将View_BallMoveFollowFinger添加到布局中 18 ll_bmff.addView(view_ballMoveFollowFinger); 19 } 20 }
效果图:


浙公网安备 33010602011771号