一个关于自定义控件的小Demo,随着手指移动的小球。
先看下效果图:
images/loading.gif' data-original="http://images2015.cnblogs.com/blog/985164/201610/985164-20161009142547324-831752167.png" />
实现代码如下:
1.自定义控件类
1 package com.dc.customview.view; 2 3 import android.content.Context; 4 import android.graphics.Canvas; 5 import android.graphics.Color; 6 import android.graphics.Paint; 7 import android.util.AttributeSet; 8 import android.view.MotionEvent; 9 import android.view.View;10 import android.view.WindowManager;11 12 public class DrawCircle extends View {13 //圆的初始位置14 private int x = 100;15 private int y = 100;16 Context context;17 18 /**19 * 有style资源文件时调用20 * @param context21 * @param attrs22 * @param defStyle23 */24 public DrawCircle(Context context, AttributeSet attrs, int defStyle) {25 super(context, attrs, defStyle);26 this.context = context;27 }28 /**29 * 30 * @param context31 * @param attrs32 */33 public DrawCircle(Context context, AttributeSet attrs) {34 super(context, attrs);35 this.context = context;36 }37 /**38 * java代码创建时调用39 * @param context40 */41 public DrawCircle(Context context) {42 super(context);43 this.context = context;44 }45 46 @Override47 protected void onDraw(Canvas canvas) {48 super.onDraw(canvas);49 // 画笔50 Paint paint = new Paint();51 paint.setColor(Color.RED);52 53 //绘制圆 54 //cx :圆心的x坐标55 //cy :圆心的y坐标 56 //radius :圆的半径57 //paint :画笔58 canvas.drawCircle(x, y, 20, paint);59 }60 61 @Override62 public boolean onTouchEvent(MotionEvent event) {63 switch (event.getAction()) {64 case MotionEvent.ACTION_DOWN:65 66 case MotionEvent.ACTION_MOVE:67 68 case MotionEvent.ACTION_UP:69 // 获取当前触摸点的x,y坐标70 71 x = (int) event.getX();72 y = (int) event.getY();73 74 75 break;76 }77 //获取屏幕宽高78 WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);79 int width = manager.getDefaultDisplay().getWidth();80 int heigh = manager.getDefaultDisplay().getHeight();81 82 //重新绘制圆 ,控制小球不会被移出屏幕83 if(x>=20 && y>=20 && x<=width-20 && y<=heigh-90){84 invalidate();85 }86 // 自己处理触摸事件87 return true;88 }89 90 }
2.引用自定义控件
第一种:
1 <RelativeLayout 2 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:id="@+id/rl"> 6 7 <!-- 自定义控件的全类名 --> 8 <com.dc.customview.view.DrawCircle 9 android:id="@+id/circle"10 android:layout_width="wrap_content"11 android:layout_height="wrap_content" >12 </com.dc.customview.view.DrawCircle> 13 14 </RelativeLayout>
第二种:代码中引用
1 package com.dc.customview; 2 3 import com.dc.customview.view.DrawCircle; 4 5 import android.os.Bundle; 6 import android.app.Activity; 7 import android.view.Menu; 8 import android.view.View; 9 import android.widget.RelativeLayout;10 11 public class MainActivity extends Activity {12 13 @Override14 protected void onCreate(Bundle savedInstanceState) {15 super.onCreate(savedInstanceState);16 setContentView(R.layout.activity_main);17 18 //获取容器19 RelativeLayout container = (RelativeLayout) findViewById(R.id.rl);20 21 //创建自定义控件22 DrawCircle circle = new DrawCircle(this);23 24 //添加到容器25 container.addView(circle);26 }27 28 }
以上,将Demo运行到模拟器或手机上,即可实现一个红色的圆,随着手指触摸移动而移动的效果。
原标题:自定义控件——随着手指移动的小球
关键词: