Android自定义View之网络图
来源:互联网 发布:淘宝店铺如何排名靠前 编辑:程序博客网 时间:2024/06/05 14:44
新建项目,新建CircualRectView
类继承自View
,实现OnGlobalLayoutListener
接口,
定义变量(RectModel为实体类):
private Context mContext; private int mViewWidth,mViewHeight; private Paint mRectPaint,mTextPaint,mLinePaint; private List<String> mDrawingText; private List<RectModel> mRectModels; private int mCenterRectHeight = 50; private int mChildRectDistance = 200 ; private int mSingleChildDegreeDistance;
添加绘制代码,修改onDraw
函数如下:
public void init(Context context){ mContext = context; mRectPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mTextPaint = new Paint(); mLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mRectPaint.setStyle(Paint.Style.FILL); mRectPaint.setColor(Color.BLUE); mTextPaint.setStrokeWidth(3); mTextPaint.setColor(Color.RED); mLinePaint.setColor(Color.BLUE); mRectModels = new ArrayList<>(); mDrawingText = new ArrayList<>(); mDrawingText.add("中心节点"); mDrawingText.add("节点1"); mDrawingText.add("节点2"); mDrawingText.add("节点3"); mDrawingText.add("节点4"); mDrawingText.add("节点5"); mDrawingText.add("节点6"); mDrawingText.add("节点7"); getViewTreeObserver().addOnGlobalLayoutListener(this); } @Override public void onGlobalLayout() { mViewWidth = getWidth(); mViewHeight = getHeight(); } @Override protected void onDraw(Canvas canvas) { /* * 绘制中心节点 * */ RectModel rectModel = new RectModel(MeasureUtils.getRect(mViewWidth/2,mViewHeight/2,mDrawingText.get(0).length()*20,mCenterRectHeight),mDrawingText.get(0),0); mRectModels.add(rectModel); drawNode(canvas,rectModel); /* * 画周围子节点 * */ mSingleChildDegreeDistance = 360 / (mDrawingText.size()-1); for (int i=0;i<mDrawingText.size()-1;i++){ RectModel rectModel1 = new RectModel(MeasureUtils.getRect(mChildRectDistance+mViewWidth/2,mViewHeight/2,mDrawingText.get(i+1).length()*20,mCenterRectHeight),mDrawingText.get(i+1),i*mSingleChildDegreeDistance); mRectModels.add(rectModel1); drawNode(canvas,rectModel1); canvas.drawLine(mViewWidth/2,mViewHeight/2,rectModel1.getCenterX(),mViewHeight/2,mLinePaint); canvas.rotate(mSingleChildDegreeDistance,mViewWidth/2,mViewHeight/2); } super.onDraw(canvas); } public void drawNode(Canvas canvas,RectModel rectModel){ /* * 锁定画布,将画布旋转回原始坐标系 * */ canvas.save(); canvas.rotate(-rectModel.getAngle(),rectModel.getCenterX(),rectModel.getCenterY()); canvas.drawRect(rectModel.getLeft(),rectModel.getTop(),rectModel.getRight(),rectModel.getBottom(),mRectPaint); Paint.FontMetricsInt fontMetrics = mRectPaint.getFontMetricsInt(); int baseline = (rectModel.getBottom() + rectModel.getTop() - fontMetrics.bottom - fontMetrics.top) / 2; mTextPaint.setTextAlign(Paint.Align.CENTER); canvas.drawText(rectModel.getText(), rectModel.getCenterX(), baseline, mTextPaint); /* * 释放画布 * */ canvas.restore(); }
运行效果如下:
0 0
- Android自定义View之网络图
- Android之自定义View
- android 之自定义View
- Android之自定义View
- Android之自定义View
- Android之自定义View
- Android 之 自定义View
- Android 自定义View 之 自定义View属性
- android自定义view之---组合view
- Android自定义View 之 View的测量
- Android 自定义View之View的绘制
- android自定义View练习之波浪View
- Android自定义view之(刻度尺view)
- android 自定义View之Path
- android之【LinearLayout自定义View】
- android 自定义view之onMeasure
- Android 自定义View之BounceProgressBar
- android开发之自定义View
- LeetCode - Delete Node in a Linked List
- 第一个程序(Java)_使用Notepad.exe和JDK
- 发布MFC ActiveX控件并实现自动更新
- C++匿名命名空间
- C++ 入门
- Android自定义View之网络图
- sql2014安装失败 windows installer错误 解决方法
- 64位linux c+nasm混合编程 gcc编译报错
- hdu1394Minimum Inversion Number
- 【HDU 2710】【素数筛选】Max Factor
- 译--ToolBar(二)
- wampserver 局域网内无法让其它电脑访问
- malloc内存分配原理
- Android中TextSwitcher的功能与用法