首页 > 其他分享 >自定义初学2——扩展View

自定义初学2——扩展View

时间:2023-09-21 10:07:27浏览次数:32  
标签:触发 自定义 int 初学 组件 android 方法 public View


倘若我们需要的功能找不到对应的系统控件了,这时我们就只能自己绘制了。首先定义一个继承View的基类,然后重写View类的一个或多个方法。


通常可以被重写的方法有这些:


onFinishInflate(): 这是一个回调方法,当应用从XML布局文件中加载组件时,该方法将被调用。


onMeasure(int,int): 该方法用来检测View组件及他所包含的所有子组件的大小。


onLayout(boolean, int, int, int, int): 当该组件分配其子组件的位置、大小时,就会被调用。


onSizeChanged(int, int, int, int): 当该组件的大小被改变时回调该方法。


onDraw(android.graphics.Canvas): 当该组件将要绘制他的内容时回调该方法。


onKeyDown(int, android.view.KeyEvent): 当某个键被按下时触发该方法。


onKeyUp(int, android.view.KeyEvent):  当某个键被松开时触发该方法。


onTrackballEvent(android.view.MotionEvent): 当发生轨迹球事件时触发该方法。


onTouchEvent(android.view.MotionEvent): 当发生触摸屏事件时触发该方法。


onFocusChanged(boolean, int, android.graphics.Rect): 当该组件得到、失去焦点时触发该方法。


onWindowFocusChanged(boolean): 当包含该组件的窗口得到、失去焦点时触发该方法。


onAttachedToWindow(): 当把该组件放入某个窗口时触发该方法。


onDetachedFromWindow():当把该组件从某个窗口分离时触发该方法。


onWindowVisibilityChanged(int): 当包含该组件的窗口的可见性发生改变时触发该方法。




当然我们并不需要重写所有的方法,而是根据功能需求写相关的方法就可以了。




下面是一个重写了onDraw方法的view,我们做一个能跟随手指移动的小球,上代码


CustomView.java


public class CustomView extends View {
 
 public float currentX ;
 
 public float currentY ;
 
 // 画笔
 
 Paint mPaint;
 
 public CustomView(Context context) {
 
  super(context);
 
  
 
 }
 
 public CustomView(Context context, AttributeSet attrs) {
 
  super(context, attrs);
 
   initPaint();
 
 }
 

 
 private void initPaint(){
 
  //画笔初始化
 
  mPaint=new Paint();
 
//设置抗锯齿
 
  mPaint.setAntiAlias(true);
 
  // 设置画笔的颜色
 
  mPaint.setColor(Color.RED);
 
 
 
 }
 
 @Override
 
 public void onDraw(Canvas canvas) {
 
  super.onDraw(canvas);
 
 
 
 
 
  // 绘制一个小圆(作为小球)
 
  canvas.drawCircle(currentX, currentY, 15, mPaint);
 
 }
 
 @Override
 
 public boolean onTouchEvent(MotionEvent event) {
 
  // 当前组件的currentX、currentY两个属性
 
  this.currentX = event.getX();
 
  this.currentY = event.getY();
 
  // 通知该组件重绘
 
  this.invalidate();
 
  // 返回true表明处理方法已经处理该事件
 
  return true;
 
 }
 
}




然后直接在要用的布局文件中加载就行了,这里就不说了

源代码








标签:触发,自定义,int,初学,组件,android,方法,public,View
From: https://blog.51cto.com/u_6947107/7548564

相关文章

  • Fragment初学8——Fragment在Android开发中的应用2
    Fragment都是依附于Activity的,通信方式大致也分为如下几种:如果Activity中包含自己管理的Fragment的引用,可以通过直接引用访问所有的Fragment的public方法 如果Activity中未保存任何Fragment的引用,那么可以通过getFragmentManager.findFragmentByTag()或者findFragmentById()获得......
  • Android 妙用TextView实现左边文字,右边图片
    有时候,需要文字在左边,右边有个箭头,我个人之前会有两种做法:使用线性布局来实现或者使用约束布局,一个左对齐,一个右对齐这几天突然想到是否可以使用TextView的设置图标的方式实现,研究发现确实可以实现我的需求,也是记录下文字和图标左右显示效果:代码:<TextViewandroid:id="@+id/......
  • 自定义读取指定目录下下文件
    publicclassPropertiesUtil{privatestaticfinalStringPath="config/param.properties";/***读取配置文件中key的对应值*/publicstaticStringqueryValue(Stringkey){if(StringUtils.isBlank(key))return"";......
  • 进程注入之ListPlanting——滥用listview控件的消息回调函数
    效果:注入代码到“注册表编辑器”(当然,必须是要有listview这种列表显示才可以执行)  ProcessInjection: ListPlanting Othersub-techniquesofProcessInjection(12)看看官方的介绍Adversariesmayabuselist-viewcontrolstoinjectmaliciouscodeinto......
  • 小程序怎么隐藏view
    小程序怎么隐藏view一、使用wx:if指令<viewwx:if="{{3>2}}">我是wx:if</view>二、使用opacity属性<viewstyle="opacity:{{opacity}}">我是opacity属性</view>三、使用display属性<viewstyle="display:none">每个组件都有的display属性&l......
  • 初学C语言
    今天继续来分享我初学C语言的收获,与大家共享。作为一名小白,其实对于大多数知识都是全新的,所以我分享的收获更为基础,或者说是更为低级。今天主要分享的是数据类型:数据类型(代码)数据名称字节char字符数据类型1short短整型2int整型4long长整型4/8longlong更长的整型8float单精度浮点型......
  • LabVIEW2023中文版labview中文版最新下载 各个版本下载
    NILabVIEW2020是一款专业的系统工程软件,用户界面友好,为用户提供了图形化编程方法,更好地进行可视化应用,如硬件配置、测量数据和调试等等方面。新版本简化了分布式测试、测量和控制系统的设计,引入了接口,且接口启用多种继承形式,大大提高用户的工作效率。软件地址:看置顶贴NILabVIEW......
  • 自定义重绘TabControl的各个标签
    设置DrawItem事件privatevoidtabControl1_DrawItem(objectsender,DrawItemEventArgse)//绘制tabcontrol控件的标签颜色和字体大小{SolidBrushback;SolidBrushwhite;SolidBrushblack=newSolidBrush(Color.Black);//字体的颜色if(e.Index==tabControl1.SelectedI......
  • 自定义字符串截取函数
    CREATEORREPLACEFUNCTIONSBUSTR(STR_INPUTINVARCHAR2,LENGTH_INPUTINNUMBER)RETURNVARCHAR2ISINUMBER;SUB_STRVARCHAR2(2000);SUB_LENGTHNUMBER:=0;STR_COUNTNUMBER:=0;TEMPNUMBER:=0;RETURN_ST......
  • joi 自定义错误提示
    <template><div><divclass="bg-whiterounded-lgfont-lightw-96shadowp-4"><divclass="text-centertext-lgmb-4">后台管理系统</div><[email protected]="(e)=>{}">......