Android 开发自定义View
2014-12-03 15:18
211 查看
【附:——自定义View常处理的回调函数
onFinishInflate() 当View中所有的子控件均被映射成xml后触发
onMeasure(int, int) 确定所有子元素的大小
onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发
onSizeChanged(int, int, int, int) 当view的大小发生变化时触发
onDraw(Canvas) view渲染内容的细节
onKeyDown(int, KeyEvent) 有按键按下后触发
onKeyUp(int, KeyEvent) 有按键按下后弹起时触发
onTrackballEvent(MotionEvent) 轨迹球事件
onTouchEvent(MotionEvent) 触屏事件
onFocusChanged(boolean, int, Rect) 当View获取或失去焦点时触发
onWindowFocusChanged(boolean) 当窗口包含的view获取或失去焦点时触发
onAttachedToWindow() 当view被附着到一个窗口时触发
onDetachedFromWindow() 当view离开附着的窗口时触发,该方法和 onAttachedToWindow() 是相反。
onWindowVisibilityChanged(int) 当窗口中包含的可见的view发生变化时触发】
1、继承View类,重载父类方法(根据自己的需要进行重载)
[java]
view plaincopyprint?
package sn.dolp.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class XmlView extends View {
public float cx = 40;
public float cy = 50;
Paint paint = new Paint();
public XmlView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public XmlView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public XmlView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
@Override
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
paint.setColor(Color.RED);
canvas.drawCircle(cx, cy, 15, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
cx = event.getX();
cy = event.getY();
invalidate();
return true;
}
}
2、修改XML布局
[html]
view plaincopyprint?
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="sn.dolp.view.MainActivity" >
<!-- 插入自制View界面 -->
<sn.dolp.view.XmlView
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
原文地址:http://blog.csdn.net/qingdujun/article/details/41551151
参考文献:UUTON的文章,http://www.uuton.com/post/3f493_24c2c7,2014年11月27日19:12:49
onFinishInflate() 当View中所有的子控件均被映射成xml后触发
onMeasure(int, int) 确定所有子元素的大小
onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发
onSizeChanged(int, int, int, int) 当view的大小发生变化时触发
onDraw(Canvas) view渲染内容的细节
onKeyDown(int, KeyEvent) 有按键按下后触发
onKeyUp(int, KeyEvent) 有按键按下后弹起时触发
onTrackballEvent(MotionEvent) 轨迹球事件
onTouchEvent(MotionEvent) 触屏事件
onFocusChanged(boolean, int, Rect) 当View获取或失去焦点时触发
onWindowFocusChanged(boolean) 当窗口包含的view获取或失去焦点时触发
onAttachedToWindow() 当view被附着到一个窗口时触发
onDetachedFromWindow() 当view离开附着的窗口时触发,该方法和 onAttachedToWindow() 是相反。
onWindowVisibilityChanged(int) 当窗口中包含的可见的view发生变化时触发】
1、继承View类,重载父类方法(根据自己的需要进行重载)
[java]
view plaincopyprint?
package sn.dolp.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class XmlView extends View {
public float cx = 40;
public float cy = 50;
Paint paint = new Paint();
public XmlView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public XmlView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public XmlView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
@Override
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
paint.setColor(Color.RED);
canvas.drawCircle(cx, cy, 15, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
cx = event.getX();
cy = event.getY();
invalidate();
return true;
}
}
2、修改XML布局
[html]
view plaincopyprint?
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="sn.dolp.view.MainActivity" >
<!-- 插入自制View界面 -->
<sn.dolp.view.XmlView
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
原文地址:http://blog.csdn.net/qingdujun/article/details/41551151
参考文献:UUTON的文章,http://www.uuton.com/post/3f493_24c2c7,2014年11月27日19:12:49
相关文章推荐
- Android AlertDialog 方法setView(view,0,0,0,0)开发自定义对话框
- Android软件开发之盘点自定义View界面大合集
- Android游戏开发教程之六:自定义View详解
- 【Android开发学习】自定义View
- android开发之自定义带边框的TextView
- Android开发中自定义View设定到FrameLayout布局中实现多组件显示
- Android开发之自定义View(视图)
- Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)
- 初学Android,开发自定义的View(四)
- Android软件开发之盘点自定义View界面大合集(二)
- Android软件开发之盘点自定义View界面大合集(二)
- Android学习开发 之 自定义view
- Android游戏开发之旅(六)自定义View
- Android开发:setContentView切换界面,自定义带CheckBox的ListView显示SQlite条目-----实现
- Android游戏开发之旅(七)自定义SurfaceView
- Android软件开发之盘点自定义View界面大合集(二)
- Android软件开发之盘点自定义View界面大合集(二) .
- android开发之自定义带边框的TextView
- [STF]Android开发问题:自定义View实例化时报错
- android从零开始-开发自定义View-跟随手指移动的小球