Gnatdiordna

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

参考《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 }

 

 
效果图:
 
 
 
 
 
posted on 2016-10-11 21:08  Gnatdiordna  阅读(894)  评论(0)    收藏  举报