iPhone与Android自绘自定义控件比较

时间:2022-08-30 10:45:41
iPhone中自绘实现步骤
1. 继承@interface MyView : UIView {
2. 实现- (void)drawRect:(CGRect)rect
3. 调用addSubView把新生成的view加入进来显示
addSubView[window addSubview:viewController.view];
4.示例代码
- (void)drawRect:(CGRect)rect {
    // create the bitmap context
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(nil,100,100,8,400, colorSpace,kCGImageAlphaPremultipliedLast);
    CFRelease(colorSpace);
    
    //    create an arrow image
    // set the fill color
    CGColorRef fillColor = [[UIColor blackColor] CGColor];
    CGContextSetFillColor(context, CGColorGetComponents(fillColor));
    
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, 8.0f, 13.0f);
    CGContextAddLineToPoint(context, 24.0f, 4.0f);
    CGContextAddLineToPoint(context, 24.0f, 22.0f);
    CGContextClosePath(context);
    CGContextFillPath(context);
    CGContextSelectFont ( context, "Arial", 10.f, kCGEncodingMacRoman );
    CGContextSetRGBFillColor ( context, 0.0f, 0.0f, 0.f, 1.f );
    CGContextSetShouldAntialias ( context, 0 );    
    CGContextShowText(context, "hh", 2);
    
    
    // convert the context into a CGImageRef
    CGImageRef image = CGBitmapContextCreateImage(context);
    CGContextRelease(context);
    
    UIImage* image2 = [UIImage imageWithCGImage:image];
    [image2 drawInRect:CGRectMake(0, 0, 120, 160)];
    
    NSString* myStr = @"中文";
    UIFont* font = [UIFont systemFontOfSize:12.0];
    [myStr drawInRect: CGRectMake(160, 240, 100, 130) withFont:font lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentCenter];
    
}

Android自绘实现步骤
1. 继承public class MyView extends View
2. 实现protected void onDraw(Canvas canvas){
3. 把生成的MyView加入到layout中
   LinearLayout rootLayout = (LinearLayout)findViewById(R.id.LinearLayout01);
        
   MyView myView=new MyView(this);
   rootLayout.addView(myView, 240, 320);
4.    onDraw实现示例(注:代码是我从网上copy的)
    protected void onDraw(Canvas canvas){
        super.onDraw(canvas);//重写onDraw方法
       
        int data[]={265481,335842,125466,256856,352151,254611,356584};
       
        int data1[]={324225,144578,352415,458125,268451,351545,252145};

        canvas.drawColor(Color.WHITE);//设置背景颜色
        Paint paint= new Paint();
        paint.setStyle(Paint.Style.STROKE);
        paint.setAntiAlias(true);//去锯齿
        paint.setColor(Color.BLUE);//颜色
       
        Paint paint1=new Paint();
        paint1.setStyle(Paint.Style.STROKE);
        paint1.setAntiAlias(true);//去锯齿
        paint1.setColor(Color.DKGRAY);
      
           //数据 线
         int n=1,m=0,x=0;
         int nn=1,mm=0,xx=0;
         int[] y=new int[100];
         y[0]=120;
        
         for(int x1=0;x1<data.length;x1++){
          y[n]=120-data[m]*20/100000;
          x=x+30;
          int x2=x+30;
                canvas.drawLine(x, y[x1], x2, y[n], paint);
                canvas.drawCircle(x2, y[n], 2, paint);
                n=n+1;
                m=m+1;
         }
        
         for(int x1=0;x1<data1.length;x1++){
          y[nn]=120-data1[mm]*20/100000;
          xx=xx+30;
          int x2=xx+30;
                canvas.drawLine(xx, y[x1], x2, y[nn], paint1);
                canvas.drawCircle(x2, y[nn], 2, paint1);
                nn=nn+1;
                mm=mm+1;
         }
        
        //设置Y轴
        canvas.drawLine(30, 10, 30, 120, paint);
        canvas.drawLine(30, 20, 35, 20, paint);
        canvas.drawLine(30, 40, 35, 40, paint);
        canvas.drawLine(30, 60, 35, 60, paint);
        canvas.drawLine(30, 80, 35, 80, paint);
        canvas.drawLine(30, 100, 35, 100, paint);

        //设置X轴
        canvas.drawLine(30,120,300,120,paint);
        canvas.drawLine(60, 120, 60, 115, paint);
        canvas.drawLine(90, 120, 90, 115, paint);
        canvas.drawLine(120, 120, 120, 115, paint);
        canvas.drawLine(150, 120, 150, 115, paint);
        canvas.drawLine(180, 120, 180, 115, paint);
        canvas.drawLine(210, 120, 210, 115, paint);
        canvas.drawLine(240, 120, 240, 115, paint);
        canvas.drawLine(270, 120, 270, 115, paint);
        //设置Y轴文字
        paint.setTextSize(7);
        canvas.drawText(getResources().getString(R.string.str_text1), 5, 100, paint);
    }