安卓程序代写 网上程序代写[原]自定义View
一. 自定义View介绍
自定义View时, 继承View基类, 并实现其中的一些方法.
(1) ~ (2) 方法与构造相关
(3) ~ (5) 方法与组件大小位置相关
(6) ~ (9) 方法与触摸按键相关
(10) ~ (12) 方法与窗口 焦点相关
(1) 构造方法
该构造方法在创建View实例, 或者从XML布局中加载并构建界面的时候调用.
(2)加载回调方法
protected void onFinishInflate()
回调方法, 从XML布局中加载该重写的View组件的时候, 就会回调这个方法;
(3)测量方法
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
这个方法用来检测View组件以及该View组件包含的子组件的大小
(4)定位组件方法
protected void onLayout(boolean changed, int left, int top, int right,int bottom)
被重写的View组件分配在其中的子组件的位置 和 大小的时候, 回调这个方法;
(5)大小改变方法
protected void onSizeChanged(int w, int h, int oldw, int oldh)
当组件大小被改变的时候回调该方法;
(6)按键方法
public boolean onKeyDown(int keyCode, KeyEvent event)
当某个键被按下时触发该方法;
(7)松开键方法
public boolean onKeyUp(int keyCode, KeyEvent event)
当某个键松开的时候调用该方法;
(8)轨迹球事件方法
public boolean onTrackballEvent(MotionEvent event)
发生轨迹球事件时触发该方法;
(9)触摸方法
public boolean onTouchEvent(MotionEvent event)
当发生触摸时间时触发该方法;
(10)焦点改变方法
public void onWindowFocusChanged(boolean hasWindowFocus)
当组件得到, 失去焦点的时候回调的方法;
(11)组件进入窗口方法
protected void onAttachedToWindow()
当把组件放入窗口的时候, 回调这个方法
(12)组件分离窗口方法
protected void onAttachedToWindow()
当把组件从某个窗口分离触发的方法
(13)窗口可见性改变方法
protected void onWindowVisibilityChanged(int visibility)
当包含该组件的窗口发生改变的时候触发的方法
二. 实现一个跟随手指的小球View
1. 自定义View
自定义一个View组件铺满全屏, 在绘制该View组件的时候, 在onDraw()方法中根据一个xy坐标绘制一个小球;
这个xy坐标在触摸回调方法onTouchEvent()方法中动态改变, 当检测到触摸位置发生改变, 那么就重新给xy坐标赋值, 并且调用invalidate()方法重绘该组件, invalidate()方法执行后, 会回调onDraw()方法;
public class FollowBallView extends View {
public float currentX = 40;
public float currentY = 50;
Paint paint = new Paint();
public FollowBallView(Context context) {
super(context);
}
public FollowBallView(Context context, AttributeSet set) {
super(context, set);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setColor(Color.RED);
canvas.drawCircle(currentX, currentY, 15, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
currentX = event.getX();
currentY = event.getY();
//重绘
invalidate();
return true;
}
}
2. xml文件
在这个xml文件中, 引入自定义的布局, 使用完整的类名包名可以引入该自定义View组件;
引入组件后, 充满整个布局;
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<shuliang.han.followball.FollowBallView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
3. Activity中显示该组件
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
4. 效果图
安卓程序代写 网上程序代写[原]自定义View的更多相关文章
- 安卓程序代写 网上程序代写[原]Android应用的自动更新模块
软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...
- 安卓程序代写 网上程序代写[原]BluetoothDevice详解
一. BluetoothDevice简介 1. 继承关系 public static Class BluetoothDevice extends Object implement Parcelable ...
- 安卓程序代写 网上程序代写[原]Android之Bluetooth编程
ViewGroup 相关资料 : http://www.incoding.org/admin/archives/199.html http://bbs.csdn.net/topics/37014474 ...
- 安卓程序代写 网上程序代写[原]vim编辑器配置及常用命令
最近工作不安分, 没有了刚入行时候的锐气, 不知道什么时候开始懈怠起来, 周末在电脑旁边看新闻, 搞笑图片, 追美剧, 一坐就是一天, 很是空虚. 我需要摆脱这种状态, 正好想学习一下安卓底层, An ...
- 安卓程序代写 网上程序代写[原]BluetoothAdapter解析
这篇文章将会详细解析BluetoothAdapter的详细api, 包括隐藏方法, 每个常量含义. 一 BluetoothAdapter简介 1.继承关系 该类仅继承了Object类; 2.该类作用 ...
- 安卓程序代写 网上程序代写[转]eclipse快捷键
F 键类 F2 显示详细信息 F3 跳到声明或定义的地方 Ctrl + 键类 Ctrl+1 快速修复 ( 最经典的快捷键 , 就不用多说了 ) Ctrl+D 删除当前行 Ctrl+E 快速显示当前 E ...
- 安卓程序代写 网上程序代写[转]SVN 在线代码托管工具
本文转载自 : http://blog.csdn.net/ithomer/article/details/8142920 作者:阳光岛主 在互联网环境使用SVN服务,你必须要有一台在互联网环境内支持 ...
- 安卓程序代写 网上程序代写[原]Call requires API level 8 (current min is 1)错误
导入了一个程序 , 每次运行之后都会出现该错误 . 点击clean 错误就会消失 , 但是执行该错误的时候该错误就会重新出现 . 这个错误需要在AndroidManifest.xml配置文件中修改 u ...
- 安卓程序代写 网上程序代写[原]Android中的回调Callback
回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 1. 如何定义一个回调 a. 定义接口 : 在 ...
随机推荐
- HTC T329手机如何删除系统自带的软件?HTC一键解锁、获取ROOT权限、豌豆荚删除系统软件
手头一部HTC T329T手机,机上默认装载的软件实在太多了,居然占用了4页.用360手机卫士并不能删除系统软件(不能获取ROOT权限).查网上查询,总结要删除系统软件步骤如下(本人不刷机,只是想删除 ...
- AlloyTouch全屏滚动插件搞定顺滑H5页
使用姿势 在设计全屏滚动插件的时候,希望开发者几乎: 不用写任何脚本快速生成精致H5 支持PC滚轮和移动触摸 酷炫的转场动效 灵活的时间轴管理 一切皆可配置 但是不写脚本肯定没有灵活性咯?!不是的.这 ...
- Postman调用WebService,包括头验证部分
Postman调用WebService时,Body中选择Raw,最右端选择XML(txt/xml),然后把某个方法显示在页面的xml拷贝到请求框中即可,如下图: 以下是postman中的设置,
- Memory Leak检測神器--LeakCanary初探
在之前的文章Android内存泄露的几种情形中提到过在开发中常见的内存泄露问题,可是过于草率.因为刚开年,工作还没正式展开,就看了一下Github开源大户Square的LeakCanary,并用公 ...
- Quantum Computation and Quantum Information
https://www.amazon.com/Quantum-Computation-Information-10th-Anniversary/dp/1107002176/ref=asap_bc?ie ...
- 灾备系统的评判指标:RTO、RPO
RTO(RecoveryTime Object)是指灾难发生后,从IT系统崩溃导致业务停顿之刻开始,到IT系统恢复至可以支持各部门运作,业务恢复运营之时,此两点之间的时间段称为RTO. RPO(Rec ...
- [Windows Azure] Getting Started with Windows Azure SQL Data Sync
Getting Started with Windows Azure SQL Data Sync In this tutorial, you learn the fundamentals of Win ...
- MySQL Workbench 的安全设置
今日用MySQL Workbench进行数据库的管理更新时,执行一个更新的语句碰到以下错误提示: Error Code: 1175 You are using safe update mode and ...
- javascript基础拾遗(八)
1.原型继承 如何让一个对象继承另一个对象? function Language(name){ this.name = name this.score = 8.0 } Language.prototy ...
- 【硅谷问道】Chris Lattner 访谈录(上)
[硅谷问道]Chris Lattner 访谈录(上) 话题 Chris Lattner 是谁? Xcode 的编译器 LLVM 背后有怎样的故事? Swift 诞生的前世今生,封闭的苹果为何要拥抱开源 ...