新浦京81707con > 软件下载 > 百度地图点击自定义标记不显示泡泡但能做其他

原标题:百度地图点击自定义标记不显示泡泡但能做其他

浏览次数:190 时间:2020-03-01

<b>转发请声明出处:CSDN: 书:

<b>源码下载:

  • 问题:
    平时来讲图所示,在设计的时候在地形图上增多标记,可是点击的效率是跳转,实际不是显示泡泡动漫,或然展现泡泡动漫之后点击泡泡动漫跳转

<b>Toast, </b><b>Snackbar, </b><b>提示</b>

先上图:

图片 1饼图.gif

图片 2

源码及所在DEMO已上传至<b>GitHub:</b><b>SweetTips</b>,接待大家提Bug,中意的话记得Star或Fork下哈!

千年不改变的覆辙:

/** * 时 间: 2017/3/13 * 作 者: 郑亮 * Q Q : 1023007219 */public class PieChart extends View { /** * 自定义颜色 */ private static int[] mColors = { 0xFF323232, 0xFFCFB054, 0xFFDA8A8A, 0xFFC89FC2, 0xFF8AD3D2, 0xFF7DB3CB, 0xFF78899E, 0xFF62AD98, 0xFFB8A690, 0xFFA1B060, 0xFFD08E76 }; /** * 画笔 */ private Paint mPaint; /** * 饼状图宽高 */ private int mWidth, mHeight; /** * 饼状图起始角度 */ private float mStartAngle = 0f; /** * 用户数据 */ private List<PieData> mData; /** * 动画时间 */ private static final long ANIMATION_DURATION = 1000; /** * 自定义动画 */ private PieChartAnimation mAnimation; /** * 绘制方式 */ private int mDrawWay = PART; public static final int PART = 0;//分布绘制 public static final int COUNT = 1;//连续绘制 public PieChart(Context context) { this(context, null); } public PieChart(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public PieChart(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } /** * 初始化数据 */ private void init() { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setAntiAlias;//抗锯齿 mPaint.setDither;//防止抖动 mPaint.setStyle(Paint.Style.FILL);//画笔为填充 //初始化动画 mAnimation = new PieChartAnimation(); mAnimation.setDuration(ANIMATION_DURATION); } /** * 设置起始角度 * * @param mStartAngle */ public void setmStartAngle(float mStartAngle) { this.mStartAngle = mStartAngle; invalidate();//刷新 } /** * 设置数据 * * @param mData */ public void setData(List<PieData> mData) { setmData; } /** * 设置数据和绘制方式 * * @param mData */ public void setData(List<PieData> mData, int mDrawWay) { setmData; this.mDrawWay = mDrawWay; } /** * 设置数据 * * @param mData */ private void setmData(List<PieData> mData) { sumValue = 0; this.mData = mData; initData; startAnimation(mAnimation); invalidate(); } float sumValue = 0;//数据值的总和 /** * 初始化数据 * * @param mData */ private void initData(List<PieData> mData) { if (mData == null || mData.size { return; } /** * 计算数据总和确定颜色 */ for (int i = 0; i < mData.size { PieData data = mData.get; sumValue  = data.getValue(); int j = i % mColors.length;//设置颜色 data.setColor(mColors[j]); } /** * 计算百分比和角度 */ float currentStartAngle = mStartAngle; for (int i = 0; i < mData.size { PieData data = mData.get; data.setCurrentStartAngle(currentStartAngle); //通过总和来计算百分比 float percentage = data.getValue() / sumValue; //通过百分比来计算对应的角度 float angle = percentage * 360; //设置用户数据 data.setPercentage(percentage); data.setAngle; currentStartAngle  = angle; } } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mWidth = w; mHeight = h; } @Override protected void onDraw(Canvas canvas) { if (mData == null) { return; } //1.移动画布到中心点 canvas.translate(mWidth / 2, mHeight / 2); //2.设置当前起始角度 float currentStartAngle = mStartAngle; //3.确定饼图的半径 float r =  (Math.min(mWidth, mHeight) / 2 * 0.95); float r1 = r / 2; float r2 = r / 1.8f; //4.确定饼图的矩形大小 RectF rectF = new RectF(-r, -r, r, r); RectF rectF1 = new RectF(-r1, -r1, r1, r1); RectF rectF2 = new RectF(-r2, -r2, r2, r2); for (int i = 0; i < mData.size { PieData data = mData.get; //5.设置颜色 mPaint.setColor(data.getColor; //6.绘制饼图 if (mDrawWay == PART) { canvas.drawArc(rectF, data.getCurrentStartAngle(), data.getAngle(), true, mPaint); } else if (mDrawWay == COUNT) { canvas.drawArc(rectF, currentStartAngle, data.getAngle(), true, mPaint); //7.绘制下一块扇形时先将角度加上当前扇形的角度 currentStartAngle  = data.getAngle(); } } //绘制中心空白处 mPaint.setColor(0x33000000); canvas.drawArc(rectF2, currentStartAngle, 360f, true, mPaint); //绘制中心阴影部分 mPaint.setColor(0xEEFFFFFF); canvas.drawArc(rectF1, currentStartAngle, 360f, true, mPaint); //绘制文字 mPaint.setColor(0xEEFF4567); mPaint.setTextSize; String str = "印象丶亮仔"; Rect textRect = new Rect(); mPaint.getTextBounds(str, 0, str.length(), textRect); canvas.drawText("印象丶亮仔", -textRect.width() / 2, 0, mPaint); }}

1

1.为什么要写那几个库?

上面包车型地铁主题素材也能够这么问:有何不足为道的急需,Android原生Toast及Design包中的Snackbar落成起来相对繁杂?<b>Toast:</b>

  1. 原生Toast不可能/不方便人民群众自定义展现时间;
  2. 原生Toast,要求翘首以待队列中前面包车型地铁Toast实例展现达成之后本领够显示,实时性差;
  3. 原生Toast,想在正在显示的Toast实例上显得新的原委并设置新内容的来得时间,落成较麻烦;
  4. 原生Toast,不或然/不方便人民群众自定义动漫;
  5. Android系统版本过多,分歧的厂家对系统的定制也相当糟糕别,同一段代码在区别的机械上,Toast的体制差别十分的大,不方便人民群众App的一致性体验;

<b>Snackbar:</b>

  • Design包中的Snackbar,无法自定义动漫;

自定义动漫:(口才撇解释不知底,能够百度自定义动漫的经过卡塔尔

 /** * 自定义动画 */ public class PieChartAnimation extends Animation { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { super.applyTransformation(interpolatedTime, t); if (interpolatedTime < 1.0f) { for (int i = 0; i < mData.size { PieData data = mData.get; //通过总和来计算百分比 float percentage = data.getValue() / sumValue; //通过百分比来计算对应的角度 float angle = percentage * 360; //根据插入时间来计算角度 angle = angle * interpolatedTime; data.setAngle; } } else {//默认显示效果 for (int i = 0; i < mData.size { //通过总和来计算百分比 PieData data = mData.get; float percentage = data.getValue() / sumValue; //通过百分比来计算对应的角度 float angle = percentage * 360; data.setPercentage(percentage); data.setAngle; } } invalidate(); } }
  • 解析须求:
    1、往地图上加多自定义标识物
    2、标识物显示数据
    3、点击标记物不能够显得泡泡,但是能兑现任何的操作

  • 遍及操作
    1、通过子类化<b>BMKAnnotationView</b>一碗水端平载<b>-initWithAnnotation:reuseIdentifier</b>将多个自定义的label增加自定义视图上,因为无法看是泡沫所以供给安装属性canShowCallout为No

2.SweetTips有哪些用?

很引人侧目,能够消除地方列举的那个很宽泛的小标题;<b>截图:</b>

图片 3SweetToast及SweetSnackbar效果录屏.gif

XML就不贴了,直接看使用:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { private com.oeynet.customview.view.PieChart picchart; private List<PieData> mDatas = new ArrayList<>(); private Button btnpart; private Button btncount; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); initData(); initListener(); } private void initListener() { this.btncount.setOnClickListener; this.btnpart.setOnClickListener; } private void initViews() { this.picchart =  findViewById(R.id.pic_chart); this.btncount =  findViewById(R.id.btn_count); this.btnpart =  findViewById(R.id.btn_part); } private void initData() { for (int i = 0; i < 6; i  ) { mDatas.add(new PieData (10 Math.random; } } @Override public void onClick { switch ) { case R.id.btn_count: picchart.setmStartAngle; picchart.setData(mDatas, PieChart.COUNT); break; case R.id.btn_part: picchart.setmStartAngle; picchart.setData(mDatas, PieChart.PART); break; } }}

多谢大神:

3.SweetTips的结构?

自定义Toast:SweetToast<b> </b>自定义Snackbar:SweetSnackbar<b> </b>SnackbarUtils:SweetSnackbar的工具类

本文由新浦京81707con发布于软件下载,转载请注明出处:百度地图点击自定义标记不显示泡泡但能做其他

关键词: 灵动 ios 自定义 动画 PieChart

上一篇:葡京线上开户的卷尺效果,Android滚动刻度尺实现

下一篇:没有了