Android 自定义TextView实现滑动解锁高亮文字
下面一段代码给大家分享Android自定义TextView实现滑动解锁高亮文字效果,具体代码如下所示:
publicclassHightLightTextViewextendsTextView{ //存储view的宽度 privateintmTextViewWidth=0; //画笔 privatePaintmPaint; //线性渲染 privateLinearGradientmLinearGradient; //存储变换的matrix privateMatrixmatrix; //移动距离 privateintmTranslateX=0; //构造方法 publicHightLightTextView(Contextcontext){ this(context,null); } publicHightLightTextView(Contextcontext,AttributeSetattrs){ this(context,attrs,0); } publicHightLightTextView(Contextcontext,AttributeSetattrs,intdefStyle){ super(context,attrs,defStyle); } /** *view的调用过程:构造方法->onFinishInflate->onSizeChanged->onDraw */ @Override protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){ super.onSizeChanged(w,h,oldw,oldh); //获取view的宽度,初始化画笔等初始属性 if(mTextViewWidth==0){ mTextViewWidth=getMeasuredWidth(); //如果宽度大于0的话,则初始化 if(mTextViewWidth>0){ //初始化画笔 mPaint=getPaint(); //线性渲染 mLinearGradient=newLinearGradient(0,getMeasuredHeight(),mTextViewWidth,0, newint[]{0X55FFFFFF,0XFFFFFFFF,0X55FFFFFF}, newfloat[]{0,0.5f,1},Shader.TileMode.CLAMP); mPaint.setShader(mLinearGradient); matrix=newMatrix(); } } } @Override protectedvoidonDraw(Canvascanvas){ super.onDraw(canvas); if(matrix!=null){ mTranslateX+=mTextViewWidth/10; //如果移动的距离大于两倍的宽度,则重新开始移动 if(mTranslateX>2*mTextViewWidth){ mTranslateX=-mTextViewWidth; } //平移matrix matrix.setTranslate(mTranslateX,0); //设置线性变化的matrix mLinearGradient.setLocalMatrix(matrix); //延迟50ms重绘(重绘时会重新调用onDraw) postInvalidateDelayed(50); } } }
补充:
AndroidTextView指定关键字高亮显示
项目中有这个需求,网上搜了一把,方法挺多的,这里选择一个简单的,已验证可用的方法,记录下,方便以后查阅。
TextViewtv=(TextView)findViewById(R.id.hello); SpannableStrings=newSpannableString(getResources().getString(R.string.linkify)); Patternp=Pattern.compile("abc"); Matcherm=p.matcher(s); while(m.find()){ intstart=m.start(); intend=m.end(); s.setSpan(newForegroundColorSpan(Color.RED),start,end,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } tv.setText(s);
很简单,tv就是TextView控件,s是要显示的字符串,“abc”是要高亮显示的关键字。