使用Android怎么构造一个滚轮控件

  介绍

这篇文章将为大家详细讲解有关使用Android怎么构造一个滚轮控件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

自定义控件无非是衡量,画画,布局三个过程,如果要支持手势动作,那么就再加上联系。

测量

测量过程比较简单,以文本大小所需要的尺寸,再加补上。

@Override   ,protected  void  onMeasure (int  widthMeasureSpec, int  heightMeasureSpec), {   ,,super.onMeasure (widthMeasureSpec, heightMeasureSpec);   ,,int  wantWith =, getPaddingLeft (), +, getPaddingRight ();   ,,int  wantHeight =, getPaddingTop (), +, getPaddingBottom ();   ,,calculateTextSize ();   ,,wantWith  +=, mTextRect.width ();   ,,//可见,item 数量计算文本尺寸   ,,if  (mVisibilityCount 祝辞,0),{   ,,,,wantHeight  +=, mTextRect.height (), *, mVisibilityCount;   ,,},{else    ,,,,wantHeight  +=, mTextRect.height (), *, DEFALUT_VISIBILITY_COUNT;   ,,}   ,,setMeasuredDimension (   ,,,,,,resolveSize (widthMeasureSpec wantWith也),   ,,,,,,resolveSize (wantHeight, heightMeasureSpec)   ,,);   ,,mNeedCalculate =,真的;   以前,}


绘制过程是通过画布的位移去绘制不同位置的部件,包括文本内容和选择框之类的,这里可能需要注意下的地方是,不要一次性把所有文本绘制出来,只需要绘制可见文本即可。

@Override   ,protected  void  onDraw (Canvas 画布),{   ,,super.onDraw(画布);      ,,if  (hasDataSource ()), {   ,,,,//,省略   ,,,,//,这里计算下需要绘制的数量,+ 2,只是确保不会出现空白   ,,,,final  int  drawCount =, mContentRect.height (),/, mTextRect.height (), +, 2;   ,,,,int  invisibleCount =, 0;   ,,,,int  dy =, -mDistanceY;   ,,,,//,省略   ,,,,//,通过,translate 绘制文本   ,,,,for  (int 小姐:=,0;,(小姐:& lt;, drawCount ,,, mDataSources.size(),祝辞,(我)invisibleCount  +,);   ,,,,,,,我+ +),{   ,,,,,,final  int  position =, invisibleCount  +,我;   ,,,,,,String  text =, mDataSources.get(位置);   ,,,,,,if (小姐:祝辞,0),{   ,,,,,,,,canvas.translate (0,, mTextRect.height ());   ,,,,,,}      ,,,,,,final  PointF  PointF =, calculateTextGravity(文本);   ,,,,,,mTextPaint.setTextSize (mTextSize);   ,,,,,,if  (position ==, selctPosition), {   ,,,,,,,,mTextPaint.setColor (mSelectedTextColor);   ,,,,,,},{else    ,,,,,,,,mTextPaint.setColor (mNormalTextColor);   ,,,,,,}   ,,,,,,canvas.drawText (pointF.x,文本,还以为,pointF.y, mTextPaint);   ,,,,}   ,,,,canvas.restoreToCount (saveCount);   ,,}   ,,   ,,//,绘制选择框   ,,int  saveCount =, canvas.save ();   ,,mDrawPaint.setColor (mSelectedLineColor);   ,,canvas.translate (mContentRect.left, mContentRect.top);   ,,canvas.drawLine (   ,,,,,,mSelctedRect.left,   ,,,,,,mSelctedRect.top,   ,,,,,,mSelctedRect.right,   ,,,,,,mSelctedRect.top,   ,,,,,mDrawPaint   ,,);   ,,canvas.drawLine (   ,,,,,,mSelctedRect.left,   ,,,,,,mSelctedRect.bottom,   ,,,,,,mSelctedRect.right,   ,,,,,,mSelctedRect.bottom,   ,,,,,mDrawPaint   ,,);   ,,canvas.restoreToCount (saveCount);   以前,}

布局

因为这个控件是继承于视图,所以不需要处理>//,多指处理   时间=final  int  pointerIndex  ev.findPointerIndex (activePointerId);   ,,,,,,if  (==pointerIndex  1), {   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

使用Android怎么构造一个滚轮控件