您的位置:首页 > 其它

自定义View,在Canvas上绘制几何图形

2015-04-05 21:52 399 查看
/CanvasTest/res/layout/activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<com.lxm.canvastest.MyView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

</LinearLayout>


/CanvasTest/src/com/lxm/canvastest/MyView.java

package com.lxm.canvastest;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LightingColorFilter;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.view.View;

public class MyView extends View {

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

@SuppressLint("DrawAllocation")
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(3);
canvas.drawCircle(40, 40, 30, paint);
canvas.drawRect(10, 80,70,140, paint);
canvas.drawRect(10, 150,70,190, paint);
RectF rect = new RectF(10,200,70,230);
canvas.drawRoundRect(rect, 15, 15, paint);
RectF oval = new RectF(10, 240, 70,270);
canvas.drawOval(oval, paint);
Path path = new Path();
path.moveTo(10, 340);
path.lineTo(70, 340);
path.lineTo(40, 290);
path.close();
canvas.drawPath(path, paint);
Path path1 = new Path();
path1.moveTo(26,360);
path1.lineTo(54, 360);
path1.lineTo(70, 392);
path1.lineTo(40, 420);
path1.lineTo(10,392);
path1.close();
canvas.drawPath(path1, paint);
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.RED);
canvas.drawCircle(120, 40, 30, paint);
Shader shader = new LinearGradient(0, 0, 40, 60, new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW},
null, Shader.TileMode.REPEAT);
paint.setShader(shader);
paint.setShadowLayer(45, 10,10,Color.GRAY);
canvas.drawCircle(200, 40,30, paint);
paint.setTextSize(24);
paint.setShader(null);
canvas.drawText(getResources().getString(R.string.cicle), 240,50, paint);
}

}
/CanvasTest/src/com/lxm/canvastest/MainActivity.java

package com.lxm.canvastest;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}
/CanvasTest/res/values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string name="app_name">CanvasTest</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string name="cicle">圓形</string>

</resources>


运行效果:



源码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: