m0_37793630 2017-03-07 02:52 采纳率: 0%
浏览 2383

如何给自定义多边形view填充颜色

一下是我的多边形的代码
package com.example.bingyantest;

import android.content.ContentValues;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.Button;

/**

  • Created by HP on 2017/3/6.
  • 算法思想:每画出一条边旋转一次画布,最终旋转N次,画出N条边
  • 边的计算方法:利用多边形对应的外接园半径 R */

public class MyView extends View {

private Paint mpaint,npaint;
private float radius, start_x, start_y, end_x, end_y;
private float m = 30;
private float UNIT = 360 / m;
private float Xo,Yo;               //用于保存起始点的数据

public MyView(Context context) {
    this(context, null);
}

public MyView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    Log.d("222", "MyView: "+UNIT);
    mpaint = new Paint();
    npaint = new Paint();
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    float mW = getMeasuredWidth();
    float mH = getMeasuredHeight();

    start_x = mW / 2;
    start_y = mH / 2;
    Xo = start_x;
    Yo = start_y;
    radius = Math.min(mW, mH) / 3;
}


@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    mpaint.setStyle(Paint.Style.STROKE);
    mpaint.setStrokeWidth(6);


    if (m > 24) {
        npaint.setColor(Color.RED);
        canvas.drawCircle(start_x,start_y,radius,npaint);
        canvas.drawCircle(start_x, start_y, radius, mpaint);
    } else {
        end_x = (float) (radius * Math.sin(Math.toRadians(UNIT)));
        end_x = start_x + end_x;
        end_y = (float) (radius * Math.cos(Math.toRadians(UNIT)));
        end_y = start_y - end_y;
        for (int i = 0; i < m; i++) {
            canvas.save();
            canvas.rotate(UNIT * i, start_x, start_y);

            canvas.drawLine(start_x, start_y - radius, end_x, end_y, mpaint);
            canvas.restore();
        }
    }
}

public void refresh(float m) {
    this.m = m;
    UNIT = 360 / this.m;
    invalidate();
}

}

  • 写回答

1条回答 默认 最新

  • moonfollower 2017-03-07 03:44
    关注

    首先你是要给多边形的边框加上颜色还是多边形的内部填充上颜色。

    如果是边框加上颜色。
    mpaint.setStyle(Paint.Style.STROKE);
    mpaint.setColor(Color.RED);

    如果是给多变型填充颜色,
    mpaint.setStyle(Paint.Style.FILL);
    mpaint.setColor(Color.RED);

    评论

报告相同问题?

悬赏问题

  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名