下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第Android實現梯形TextView效果@Override
protectedvoidonLayout(booleanchanged,intleft,inttop,intright,intbottom){
super.onLayout(changed,left,top,right,bottom);
width=getWidth();
height=getHeight();
Log.v(TAG,"widthheight-"+width+""+height);
@Override
protectedvoidonDraw(Canvascanvas){
super.onDraw(canvas);
Log.v(TAG,"onDraw");
if(isLeft){
linePath.moveTo(0+lineOffset,0+lineOffset);
linePath.lineTo(width,0+lineOffset);
linePath.lineTo((int)(width-offsetScale*height),height-lineOffset);
linePath.lineTo(0+lineOffset,height-lineOffset);
linePath.close();
setTextAlignment(TEXT_ALIGNMENT_TEXT_START);
canvas.drawPath(linePath,paint);
canvas.drawText(textContent==null"":textContent,
getPaddingStart()+lineOffset,
height/2+textOffset,textPaint);
}else{
linePath.moveTo(0+lineOffset+offsetScale*height,0+lineOffset);
linePath.lineTo(width-lineOffset,0+lineOffset);
linePath.lineTo(width-lineOffset,height-lineOffset);
linePath.lineTo(0,height-lineOffset);
linePath.close();
setTextAlignment(TEXT_ALIGNMENT_TEXT_END);
canvas.drawPath(linePath,paint);
canvas.drawText(textContent==null"":textContent,
getWidth()-lineOffset-getPaddingEnd()-getDrawTextWidth(textPaint,textContent),
height/2+textOffset,textPaint);
@Override
publicbooleandispatchTouchEvent(MotionEventevent){
if(event.getAction()==MotionEvent.ACTION_DOWN){
if(!isInRegion(event)){//點擊的點的位置不在范圍內則不響應
returnfalse;
returnsuper.dispatchTouchEvent(event);
*判斷點擊的位置是否在要求的范圍內
*@paramevent
*@return
publicbooleanisInRegion(MotionEventevent){
RectFrectF=newRectF();
linePputeBounds(rectF,true);
mRegion.setPath(linePath,newRegion((int)rectF.left,(int)rectF.top,(int)rectF.right,(int)rectF.bottom));
returnmRegion.contains((int)event.getX(),(int)event.getY());
*獲取要畫的字符串的寬度
*@parampaint
*@paramtextContent
*@return
privateintgetDrawTextWidth(Paintpaint,StringtextContent){
floattotalWidth=0f;
if(textContent!=nulltextContent.length()0){
intlen=textContent.length();
float[]widths=newfloat[len];
paint.getTextWidths(textContent,widths);
for(intj=0;jlen;j++){
totalWidth+=widths[j];
return(int)Math.ceil(totalWidth);
*@paramdpValue(DisplayMetrics類中屬性density)
*@return
privateintdp2px(Contextcontext,floatdpValue){
finalfloatscale=context.getResources().getDisplayMetrics().density;
return(int)(dpValue*scale+0.5f);
publicvoidsetTextContent(StringtextContent){
this.textContent=textContent;
invalidate();
publicvoidsetMSelected(booleanisSelected){
textPaint.setColor(isSelectedColor.WHITE:selectedColor);
paint.setStyle(isSelectedPaint.Style.FILL_AND_STROKE:Paint.Style.STROKE);
this.isSelected=isSelected;
invalidate();
@Override
publicbooleanisSelected(){
returnisSelected;
}
要點分析
1.背景與文本內容的繪制
計算好四個點的位置連線,TextView默認的文本內容則設置為空字符串,采用drawText的方式來實現文本的顯示。需要注意的是計算文本的字號長度大小、顏色以及位于整個view的位置、偏移量等。
2.梯形范圍內外的點擊事件處理
依照于設計,梯形內的點擊才有響應,則要計算點擊的位置是否在梯形內,然后通過dispatchTouchEvent來做事件的分發。
*判斷點擊的位置是否在要求的范圍內
*@paramevent
*@return
publicbooleanisInRegion(MotionEventevent){
RectFrectF=newRectF();
linePputeBounds(rectF,true);
mRegion.setPath(linePath,newRegion((int)rectF.left,(int)rectF.top,(int)rectF.right,(int)rectF.bottom));
returnmRegion.contains((int)eve
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年高職(園林技術)園林景觀設計實訓綜合測試題及答案
- 2026年河北省中考麒麟卷生物(八)及答案
- 2026年起重機地操、遙控作業人員培訓考試專項測試卷附答案
- 2026幼兒園保育保健知識考試試題及答案
- 2026年初中美術結合培訓試卷
- 梅州交警筆試試題及完整答案
- 蘇軾競賽試題及答案
- 總經理試用期個人思想總結報告2026(3篇)
- 高壓供用電合同參考文本(2026版)
- 《中國主要木材名稱》
- 2025-2030中國農藥懸浮劑行業發展趨勢預判及市場前景預測研究報告
- 《康復護理實踐指南》課件
- 鉆井事故與復雜問題(江漢油田)
- 英語(PEP)三年級下冊教師教學用書
- 起重機械吊具與索具安全規程
- 國際消防安全系統規則
- 五星級酒店服務員培訓
- 基金投資管理系統O32操作手冊-風險控制
- 數據建模工程師招聘筆試題與參考答案(某大型集團公司)2024年
- DL-T573-2021電力變壓器檢修導則
- 新聞采訪與寫作-馬工程-第二章
評論
0/150
提交評論