android自定义view画图

来源:互联网 发布:印度尼西亚华人知乎 编辑:程序博客网 时间:2024/06/05 16:41
Main方法
package wuhao.bwei.com.wuhao20171130;import android.graphics.Paint;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.LinearLayout;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();    }    private void init() {        LinearLayout layout = (LinearLayout) findViewById(R.id.pa);        Pain pp = new Pain(this);        pp.setMinimumHeight(500);        pp.setMinimumWidth(300);        pp.invalidate();        layout.addView(pp);    }}
布局中导入Pain类




package wuhao.bwei.com.wuhao20171130;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.LinearGradient;import android.graphics.Paint;import android.graphics.Path;import android.graphics.RectF;import android.graphics.Shader;import android.os.Build;import android.support.annotation.Nullable;import android.support.annotation.RequiresApi;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** * Created by alienware on 2017/11/30. */public class Pain extends View{ float x = 100f; float y = 100f; public Pain(Context context) { super(context); } public Pain(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public Pain(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public Pain(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } protected void onDraw(Canvas canvas){ super.onDraw(canvas); Paint p = new Paint(); p.setColor(Color.RED); canvas.drawText("画圆",20,20,p); canvas.drawCircle(x,y,50,p); p.setAntiAlias(true);//设置画笔的锯齿效果。true是去除锯齿效果 canvas.drawText("画线和弧形",10,60,p); //颜色设置为黄色 p.setColor(Color.BLACK); canvas.drawLine(120,80,200,80,p);//画线 canvas.drawLine(220,80,380,160,p);//斜线 p.setStyle(Paint.Style.STROKE);//设置空心 RectF oval1=new RectF(150,20,180,40); canvas.drawArc(oval1, 180, 180, false, p);//小弧形 oval1.set(190, 20, 220, 40); canvas.drawArc(oval1, 180, 180, false, p);//小弧形 oval1.set(160, 30, 210, 60); canvas.drawArc(oval1, 0, 180, false, p);// //画矩形 canvas.drawText("画矩形",10,80,p); //设置颜色 p.setColor(Color.BLUE); //设置样式:填满 p.setStyle(Paint.Style.FILL); //canvas.drawRect(120,120,160,160,p);//正方形:左上右下 canvas.drawRect(60,90,160,200,p);//长方形 //画扇形和椭圆 canvas.drawText("画扇形和椭圆",15,300,p); /*设置渐变色 正方形颜色改变*/ Shader mShader = new LinearGradient(0,0,100,100,new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW,Color.LTGRAY},null,Shader.TileMode.REPEAT); //渐变色设置完毕 p.setShader(mShader); RectF ova12 = new RectF(120,200,400,480); canvas.drawArc(ova12,200,130,true,p); //椭圆 ova12.set(210,100,250,130); canvas.drawOval(ova12,p); //画三角形 canvas.drawText("画三角形",10,320,p); //绘制这个三角形 Path path = new Path(); path.moveTo(80, 300);// 此点为多边形的起点 path.lineTo(120, 250); path.lineTo(80, 250); path.close(); // 使这些点构成封闭的多边形 canvas.drawPath(path, p); p.reset();//重置 p.setColor(Color.LTGRAY);// p.setStyle(Paint.Style.STROKE);//设置空心// Path path1=new Path();// path1.moveTo(180, 200);// path1.lineTo(200, 200);// path1.lineTo(210, 210);// path1.lineTo(200, 220);// path1.lineTo(180, 220);// path1.lineTo(170, 210); //path1.close();//封闭 //canvas.drawPath(path1, p); } @Override public boolean onTouchEvent(MotionEvent event) { x = event.getX(); y = event.getY(); invalidate(); return true; }}
原创粉丝点击