android中圆环布局会有很多用处,菜单、点选、连接等下面是利用画布实现的

首先定义环形上的对象

package com.bm;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.view.KeyEvent;/** * @author shaohx * */public class Creater {private int width;private int height;public String getName() {return name;}public void setName(String name) {this.name = name;}//坐标以及位图public int x, y;private Bitmap bmpCreater;private String name;//构造函数public Creater(Bitmap bmpCreater,int width,int height) {this.width=width;this.height=height;this.bmpCreater = bmpCreater;x = width / 2 - bmpCreater.getWidth() / 2;y = height/2 - bmpCreater.getHeight()/2;}//绘图函数public void draw(Canvas canvas, Paint paint) {canvas.drawBitmap(bmpCreater, x, y, paint);//canvas.drawCircle(x+bmpCreater.getWidth()/2, y+bmpCreater.getHeight()/2, 120, paint);canvas.drawText("李娜", x+bmpCreater.getWidth()/2-7, y+bmpCreater.getHeight()+10, paint);}}
自定义 SurfanceView 当然这里可以用View

@SuppressLint("NewApi")public class MySurfaceView extends SurfaceView implements Callback, Runnable {private SurfaceHolder sfh;private Paint paint;private Thread th;private boolean flag;private Canvas canvas;public static int screenW, screenH;private Context context;private Reciver reciver;private List list;//声明一个Resources实例便于加载图片private Resources res = this.getResources();/** * SurfaceView初始化函数 */public MySurfaceView(Context context,List recivers) {super(context);this.context=context;this.list=recivers;sfh = this.getHolder();sfh.addCallback(this);setZOrderOnTop(true);  sfh.setFormat(PixelFormat.TRANSPARENT);//设置背景透明  paint = new Paint();paint.setColor(Color.BLACK);paint.setAntiAlias(true);setFocusable(true);//this.setZOrderOnTop(true);//自定义视图位于xml布局上层////;}/** * SurfaceView视图创建,响应此函数 */@Overridepublic void surfaceCreated(SurfaceHolder holder) {screenW = this.getWidth();screenH = this.getHeight();flag = true;//实例线程th = new Thread(this);//启动线程th.start();}/** * 绘图 */public void myDraw() {try {canvas = sfh.lockCanvas();if (canvas != null) {canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);//清除屏幕  //接收者for(int i=0;i

下边是在Activity里边的调用

得到环形上每个对象之间的角度

private int getAngle(int size){int angle=(int) Math.round(360/size);return angle;}

调用
//得到每个对象之间的角度int angle=getAngle(8);
//计算坐标
for(int i = -150; i < 210;){// 避免第一个和最后一个重合if (210 - i < angle) {break;}int x = (int) (mPointX + (r * Math.cos(i * Math.PI/ 180)));int y = (int) (mPointY + (float) (r * Math.sin(i* Math.PI / 180)));//Reciver对象Bitmap btpReciver=BitmapFactory.decodeResource(getResources(), R.drawable.favicon50_black);Reciver recivera=new Reciver(btpReciver,list.get(j).getUserName(), x, y);mList.add(recivera);i = i + angle;j++;if (j == c.size()) {break;}}
mList是要显示成环形的对象集合





更多相关文章

  1. 箭头函数的基础使用
  2. 类和 Json对象
  3. Python技巧匿名函数、回调函数和高阶函数
  4. android 系统关机,重启
  5. Android高手进阶教程(二十五)之---Android(安卓)中的AIDL!!!
  6. Android(安卓)内存泄漏相关
  7. Android(安卓)Binder入门指南之Binder相关的接口和类
  8. 对于android触摸事件模型的一些理解
  9. [置顶] Android热补丁技术—dexposed原理简析(手机淘宝采用方案)

随机推荐

  1. 探索react-native run-ios(android)
  2. 始终悬浮在Android屏幕的弹窗
  3. Android之TextureView浅析
  4. java(eclipse)与VC++6.0 UDP通信
  5. android 如何自定义通知栏图标(不使用自定
  6. Google 与 Android(安卓)Studio插件自用
  7. Android(安卓)Jetpack框架之LiveData与Vi
  8. Android(安卓)Volley库源码简析(Image Req
  9. Android(安卓)布局优化之include与merge,
  10. 一步一步学习Android(安卓)TV/盒子开发(三