本篇文章為大家展示了如何在Android應用中實現自定義View,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
創新互聯公司是一家專注于網站設計、網站建設與策劃設計,牟定網站建設哪家好?創新互聯公司做網站,專注于網站建設十多年,網設計領域的專業建站公司;建站業務涵蓋:牟定等地區。牟定做網站價格咨詢:18982081108Android自定義view的種類
自定義view大概可以分為四個大類,主要是通過實現方式來區分
1.自繪控件,繼承view,重寫onDraw方法,在其中進行繪制,需要自己適配邊距等等
2.繼承ViewGroup派生的特殊Layout,主要用于實現自定義布局,也需要自己適配邊距等
3.繼承特定的View(如TextView等),不用自己適配支持wrap_conten,match_parent,可以給其加入新的功能
4.繼承特定的ViewGroup,例如linearlayout,多用于多個控件的組合view,也不用自己去做適配
自繪控件
這種自定義view是最復雜的一種,因為既要適配wrap_conten,match_parent又要通過條件判斷來在屏幕上繪制不同的內容,主要就是重寫onDraw方法
以下是一個簡單的onDraw重寫代碼
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); final int paddingLeft = getPaddingLeft(); final int paddingRight = getPaddingRight(); final int paddingTop = getPaddingTop(); final int paddingBottom = getPaddingBottom(); //get the view's width and height and decide the radiu int width = getWidth() - paddingLeft - paddingRight; int height = getHeight() - paddingTop - paddingBottom; radiu = Math.min(width , height) / 2 - boundWidth - progressWidth; //setup the paint paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(boundWidth); paint.setColor(Color.BLACK); //draw the inner circle int centerX = paddingLeft + getWidth()/2; int centerY = paddingTop + getHeight() / 2; canvas.drawCircle(centerX,centerY, radiu, paint); float totalRadiu = radiu +boundWidth +progressWidth/2; //draw the circlr pic if (drawable != null&&bitmap == null) { image = ((BitmapDrawable) drawable).getBitmap(); bitmap = Bitmap.createBitmap((int)(2*totalRadiu),(int)(2*totalRadiu), Bitmap.Config.ARGB_8888); Canvas bitmapCanvas = new Canvas(bitmap); Paint bitmapPaint = new Paint(); bitmapPaint.setAntiAlias(true); bitmapCanvas.drawCircle(totalRadiu, totalRadiu, radiu, bitmapPaint); bitmapPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); bitmapCanvas.drawBitmap(image,null,new RectF(0,0,2*totalRadiu,2*totalRadiu) , bitmapPaint); } Rect rect = new Rect((int)(centerX -totalRadiu),(int)(centerY-totalRadiu),(int)(centerX+totalRadiu),(int)(centerY+ totalRadiu)); canvas.save(); if(isRotate) canvas.rotate(rotateDegree,centerX,centerY); canvas.drawBitmap(bitmap,null ,rect, paint); canvas.restore(); //set paint for arc paint.setStrokeWidth(progressWidth); paint.setStrokeCap(Paint.Cap.ROUND); //prepare for draw arc RectF oval = new RectF(); oval.left = centerX -totalRadiu ; oval.top =centerY- totalRadiu ; oval.right = centerX + totalRadiu; oval.bottom = centerY+ totalRadiu; paint.setColor(progressBackColor); //draw background arc canvas.drawArc(oval, arcStar, arcEnd, false, paint); //draw progress arc paint.setColor(progressColor); canvas.drawArc(oval, arcStar, progress, false, paint); }
標題名稱:如何在Android應用中實現自定義View-創新互聯
URL標題:http://vcdvsql.cn/article20/jgijo.html
成都網站建設公司_創新互聯,為您提供網站建設、標簽優化、企業網站制作、軟件開發、App設計、營銷型網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯