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);

    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?