android draw bitmap,Android:canvas.drawBitmap()方法无法正常工作

我已经发布了两个与此相关的问题(请参阅

custom piechart 1和此custom pie chart 2),但没有得到答案,最终我开发了自己的软件,但在某个时候被卡住了.

我需要在绘制区域之间创建线条,如您在图像中看到的.对于内圈,我使用canvas.drawArc().对于外圈,我使用canvas.drawCircle();对于中线,我使用canvas.drawBitmap()方法,但有所不同角度.此处正确绘制了内部和外部圆,但对于中间弧线,仅正确绘制了前两个位图/弧,而其余两个未处于其精确位置.

我使用相同的代码绘制所有位图/弧,但未获得确切的输出.我被卡住了确切的问题.需要帮助,在此先感谢.

你可以看到我的输出

这里..

听到的是我的onCreate(),在其中生成并设置view.

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

lv1 = (LinearLayout) findViewById(R.id.linear);

matrix = new Matrix();

MyView myview = new MyView(this);

lv1.addView(myview);

}

这是我要生成的customview类.

public class MyView extends View {

private Paint p ,paint,paint_text;

private int startX;

private int startY;

private int radius;

private ArrayList colors;

private ArrayList values;

Bitmap bitmap;

Context mContext;

RectF rectF , rectF2 ;

public MyView(Context context) {

super(context);

mContext = context;

p = new Paint();

p.setAntiAlias(true);

colors = new ArrayList();

values = new ArrayList();

Display display = getWindowManager().getDefaultDisplay();

width1 = display.getWidth();

height1 = display.getHeight();

startX = 0 ;

startY = 0;

radius = (int) (width1/2);

colors.add(Color.RED);

colors.add(Color.BLUE);

colors.add(Color.YELLOW);

colors.add(Color.GREEN);

values.add(8f);

values.add(2f);

values.add(4f);

values.add(2f);

}

这是我的onDraw()方法.

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

float _angle1 = 0 ,_angle2 = 0 ,_angle3 = 0 , _angle4 =0;

Bitmap myBitmap1 = BitmapFactory.decodeResource(getResources(),R.drawable.saperate_line);

bitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888);

Canvas c = new Canvas(bitmap);

float offset = 0;

float angle = (float) 5.60 ;

matrix.reset();

canvas.translate(0,canvas.getHeight()); //reset where 0,0 is located

canvas.scale(1,-1); // for scaling

rectF = new RectF();

rectF.set(-(getStartX() + getRadius()), -(getStartY() + getRadius()), getStartX() + getRadius(),getStartY() + getRadius());

//for creating outer circle using canvas.drawCircle-----------

paint = new Paint();

paint.setColor(Color.GREEN);

paint.setStrokeWidth(2);

paint.setStyle(Paint.Style.STROKE);

canvas.drawCircle(0, 0, (float) (width1/(1.4)), paint);

//for creating inner circle using canvas.drawArc-----------

for (int i = 0; i < values.size(); i++) {

p.setColor(colors.get(i));

if (i == 0) {

canvas.drawArc(rectF, offset, values.get(i) * angle, true, p);

_angle1 = ((offset+(values.get(i) * angle)))/2;

matrix.postRotate(_angle1);

canvas.drawBitmap(myBitmap1, matrix, null);

}

if(i == 1){

canvas.drawArc(rectF, offset, values.get(i) * angle, true, p);

_angle2 = ((offset + (values.get(i) * angle)))/2;

matrix.postRotate(_angle2);

canvas.drawBitmap(myBitmap1, matrix, null);

}

if(i == 2){

canvas.drawArc(rectF, offset, values.get(i) * angle, true, p);

_angle3 = ((offset + (values.get(i) * angle)))/2;

// _angle3 = (offset + angle);

matrix.postRotate(_angle3);

canvas.drawBitmap(myBitmap1, matrix, null);

}

if (i == 3){

canvas.drawArc(rectF, offset, values.get(i) * angle, true, p);

_angle4 = ((offset + (values.get(i) * angle)))/2;

matrix.postRotate(_angle4);

canvas.drawBitmap(myBitmap1, matrix, null);

}

offset += (values.get(i) * angle);

Log.e("new offset :: ","****************************"+offset);

}

canvas.save();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值