跟随手指移动的小球
以下是在学习Crazy Android以及个人理解的基础上对于跟随手指移动的小球的实现。
我们首先要建立一个自定义的View 组件。
首先定义并创建画笔:
//定义并创建画笔
Paint p = new Paint();
//那么如下代码有何用?
public DrawView(Context context) {
super(context);
}
public DrawView(Context context, AttributeSet set) {
super(context,set);
}
接着重写onDraw() 方法,然后绘制出小球
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
//设置画笔的颜色
p.setColor(Color.RED);
//绘制一个小圆作为小球
canvas.drawCircle(currentX, currentY, 15, p)
}
再为该组件的触碰事件重写事件处理方法
@override
public boolean onTouchEvent(MotionEvent event) {
//修改currentX, currentY两个属性
currentX = event.getX();
currentY = event.getY();
//通知当前组件重绘自己
invalidate();
//返回true表明该处理方法已经处理该事件
return true;
}
DrawView上小球跟随手指移动而移动的原理:
onTouchEvent() 方法用于处理该组件的触碰事件,当用户的手指触碰该组件时将会激发该方法。当手指在触摸屏上移动时,将会不断地触发触摸屏事件,事件监听器中负责触发事件的坐标将被传入DrawView组件,并通知该组件重绘。
再接下来我们通过java代码把该组件添加到指定容器(此处为MainActivity类)中,这样就可以看到该组件的运行效果了。
//获取布局文件中的LinearLayout容器
LinearLayout root = (LinearLayout) findViewById(R.id.root);
//创建DrawView组件
final DrawView draw = new DrawView(this);
//设置自定义组件的最小宽度、高度
draw.setMinimumWidth(300);
draw.setMinimumHeight(500);
root.addView(draw);
以上的过程中实际上在java代码中创建了DrawView组件的实例,并将它添加到LinearLayout容器中,实际上完全可以在XML布局文件中管理该文件,因此可以使用如下布局文件:
<com.example.dell1.ball.DrawView
android:layout_width = "match_parent";
android:layout_height = "match_parent"; />
在上面的布局文件中添加了自定义组件之后,因此Java代码只需要加载该界面布局文件即可,无需通过Java代码来添加该自定义组件。
因此,Activity的代码可以简化为如下形式:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
以下是我的github上的源码链接:
https://github.com/WilliamYi96/Android/tree/master/Training-Project/Ball
以下是页面展示:
本文介绍了一种基于Android平台的手指控制小球移动的技术实现方案。通过自定义View组件及重写onDraw()和onTouchEvent()方法,实现了小球跟随手指在屏幕上移动的功能。
4241

被折叠的 条评论
为什么被折叠?



