package com.electronapps.LJPro; import android.graphics.Canvas; import android.graphics.DashPathEffect; import android.graphics.Paint; import android.graphics.PathEffect; import android.graphics.Rect; import android.graphics.Paint.FontMetricsInt; import android.graphics.Paint.Style; import android.os.Parcel; import android.text.DynamicLayout; import android.text.Layout; import android.text.Spanned; import android.text.TextPaint; import android.text.style.CharacterStyle; import android.text.style.LeadingMarginSpan; import android.text.style.ReplacementSpan; public class BlockSpan { private int mColor; private int mBColor; private Style mStyle; private PathEffect mPathEffect; public BlockSpan(int blockColor,int termColor,Style style,PathEffect effect) { mStyle=style; mBColor=blockColor; mPathEffect=effect; mColor=termColor; } public BlockSpan(){ mColor = 0xffF51111; mBColor=0xffCFD1CD; } public BlockSpan(Parcel p) { mBColor=p.readInt(); mColor=p.readInt(); } public void setBackgroundColor(int color) { mBColor=color; } public void setUnderLineColor(int color){ mColor=color; } public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mBColor); dest.writeInt(mColor); } public void drawBlock(Canvas c, Paint p, float X,Rect curLine,int baseline, CharSequence text, int start, int end,Layout layout) { Spanned spanned=(Spanned)text; Rect rect=new Rect(); p.getTextBounds(text.toString(), start, end,rect); float ret=p.measureText(text,start,end); float x=X+curLine.left; int bottom=curLine.bottom; int top=curLine.top; int color=p.getColor(); PathEffect effect=p.getPathEffect(); Style style=p.getStyle(); if (mBColor!=-1) { p.setColor(mBColor); p.setStyle(Paint.Style.FILL); p.setPathEffect(effect); c.drawRect(x, rect.top, x+ret, rect.bottom, p); } p.setColor(mColor); if (mPathEffect!=null) { p.setPathEffect(mPathEffect); } p.setStyle(Paint.Style.STROKE); p.setStrokeWidth(2.0f); c.drawLine(x,bottom, x, top, p); int spanStart=spanned.getSpanStart(this); int spanEnd=spanned.getSpanEnd(this); if (start==spanStart) { if (spanEnd>end) { c.drawLine(x, top,curLine.right, top, p); } else c.drawLine(x, top,x+ret, top, p); } if (spanEnd>end) { c.drawLine(curLine.right,bottom,curLine.right,top,p); } else c.drawLine(x+ret, bottom, x+ret, top, p); if (layout.getLineForOffset(start)==layout.getLineForOffset(spanStart)+1){ float spanOffset=layout.getPrimaryHorizontal(spanStart); if (layout.getPrimaryHorizontal(start)<spanOffset){ c.drawLine(curLine.left,top,curLine.left+spanOffset,top,p); } } if (end==spanEnd) { c.drawLine(x, bottom,x+ret, bottom, p); if (start!=spanStart) { c.drawLine(x+ret, curLine.top, curLine.right, curLine.top, p); } } p.setStyle(style); p.setPathEffect(effect); p.setColor(color); } }