自定义View


public class MainActivity extends AppCompatActivity {

    private RelativeLayout relat;
    //item上的数据源
    private String[] name = {"矩形", "圆形", "三角形", "扇形", "椭圆", "曲线","文字和图片"};
    private ListView listview;
    //listview的adapter
    private ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化listview
        listview = (ListView) findViewById(R.id.listview);
        //实例化数据源
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, name);
        //listview设置adapter
        listview.setAdapter(adapter);
        //listview设置点击事件
        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                intent.putExtra("position",position);
                startActivity(intent);
            }
        });
    }
}
public class Main2Activity extends AppCompatActivity {

    private RelativeLayout relat;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        //获取布局文件中的容器
        relat=(RelativeLayout)findViewById(R.id.rela);
        int position=getIntent().getIntExtra("position",0);
        //判断点击了第几个
        if (position == 0) {
            //矩形
            //创建DrawView组件
            RectActivity dv=new RectActivity(getApplicationContext());
            //设置自定义组件的最大宽度、高度
            dv.setMinimumHeight(400);
            dv.setMinimumWidth(200);
            //添加到容器中
            relat.addView(dv);
        } else if (position == 1) {
            //圆形
            //创建DrawView组件
            CircleActivity dv=new CircleActivity(getApplicationContext());
            //设置自定义组件的最大宽度、高度
            dv.setMinimumHeight(400);
            dv.setMinimumWidth(200);
            //添加到容器中
            relat.addView(dv);
        } else if (position == 2) {
            //三角形
            //创建DrawView组件
            TrigonActivity dv=new TrigonActivity(getApplicationContext());
            //设置自定义组件的最大宽度、高度
            dv.setMinimumHeight(400);
            dv.setMinimumWidth(200);
            //添加到容器中
            relat.addView(dv);
        } else if (position == 3) {
            //扇形
            //创建DrawView组件
            SectorActivity dv=new SectorActivity(getApplicationContext());
            //设置自定义组件的最大宽度、高度
            dv.setMinimumHeight(400);
            dv.setMinimumWidth(200);
            //添加到容器中
            relat.addView(dv);
        } else if (position == 4) {
            //椭圆
            //创建DrawView组件
            OvalActivity dv=new OvalActivity(getApplicationContext());
            //设置自定义组件的最大宽度、高度
            dv.setMinimumHeight(400);
            dv.setMinimumWidth(200);
            //添加到容器中
            relat.addView(dv);
        } else if (position == 5) {
            //曲线
            //创建DrawView组件
            PathActivity dv=new PathActivity(getApplicationContext());
            //设置自定义组件的最大宽度、高度
            dv.setMinimumHeight(400);
            dv.setMinimumWidth(200);
            //添加到容器中
            relat.addView(dv);
        }else if (position == 6) {
            //曲线
            //创建DrawView组件
            TvIvActivity dv=new TvIvActivity(getApplicationContext());
            //设置自定义组件的最大宽度、高度
            dv.setMinimumHeight(400);
            dv.setMinimumWidth(200);
            //添加到容器中
            relat.addView(dv);
        }

    }
}
//矩形
public class RectActivity extends View {
    //无参
    public RectActivity(Context context) {
        super(context);
    }

    //有参
    public RectActivity(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // 创建画笔
        Paint p = new Paint();
        //设置实心
        p.setStyle(Paint.Style.FILL);
        // 设置红色
        p.setColor(Color.BLACK);
        // 设置画笔的锯齿效果
        p.setAntiAlias(true);
        //绘制
        canvas.drawRect(50, 100, 900, 900, p);

    }
}
//圆形
public class CircleActivity extends View {

    int width;
    int height;

    //无参
    public CircleActivity(Context context) {
        super(context);
        init();
    }

    //有参
    public CircleActivity(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        //获取屏幕的宽高
        //Android绘图机制(一)——自定义View的基础属性和方法里面有讲
        WindowManager wm = (WindowManager) getContext()
                .getSystemService(Context.WINDOW_SERVICE);

        width = wm.getDefaultDisplay().getWidth();
        height = wm.getDefaultDisplay().getHeight();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint p = new Paint();
        p.setColor(Color.BLACK);
        // 设置画笔的锯齿效果
        p.setAntiAlias(true);
        canvas.drawCircle(width / 4, height / 2, width / 4, p);
    }
}

//扇形
public class SectorActivity extends View {

    public SectorActivity(Context context) {
        super(context);
    }

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

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 创建画笔
        Paint p = new Paint();
        p.setColor(Color.BLACK);
        RectF rectF = new RectF(300, 300, 600, 700);
        canvas.drawArc(rectF, 300, 160, true, p);
    }
}
//三角形
public class TrigonActivity extends View {

    //无参
    public TrigonActivity(Context context) {
        super(context);
    }

    //有参
    public TrigonActivity(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint p = new Paint();
        p.setColor(Color.BLACK);
        //实例化路径
        Path path = new Path();
        path.moveTo(100, 200);// 此点为多边形的起点
        path.lineTo(500, 400);
        path.lineTo(100, 400);
        path.close(); // 使这些点构成封闭的多边形
        canvas.drawPath(path, p);

    }
}
//椭圆
public class OvalActivity extends View {

    public OvalActivity(Context context) {
        super(context);
    }

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

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // 创建画笔
        Paint p = new Paint();
        p.setColor(Color.BLACK);
        RectF rectF = new RectF(60, 100, 200, 240);
        rectF.set(210,100,600,300);
        canvas.drawOval(rectF, p);
    }
}
//曲线
public class PathActivity extends View {

    public PathActivity(Context context) {
        super(context);
    }

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

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // 创建画笔
        Paint p = new Paint();
        p.setColor(Color.BLACK);

        p.reset();
        //设置空心
        p.setStyle(Paint.Style.STROKE);
        Path path = new Path();
        path.moveTo(100, 320);//设置Path的起点
        path.quadTo(300, 900, 300, 300);  //设置路径点和终点
        canvas.drawPath(path, p);
    }
}
//文字或图片
public class TvIvActivity extends View {
    public TvIvActivity(Context context) {
        super(context);
    }

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

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint p = new Paint();
        p.setColor(Color.RED);

        //文本
        canvas.drawText("自定义文本", 200, 330, p);
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
        //图片
        canvas.drawBitmap(bitmap, 250, 300, p);
    }
}
//圆环
public class CircleActivity extends View {

    int width;
    int height;

    //无参
    public CircleActivity(Context context) {
        super(context);
        init();
    }

    //有参
    public CircleActivity(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        //获取屏幕的宽高
        //Android绘图机制(一)——自定义View的基础属性和方法里面有讲
        WindowManager wm = (WindowManager) getContext()
                .getSystemService(Context.WINDOW_SERVICE);

        width = wm.getDefaultDisplay().getWidth();
        height = wm.getDefaultDisplay().getHeight();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint p = new Paint();
        p.setColor(Color.BLACK);
        // 设置画笔的锯齿效果
        p.setAntiAlias(true);
        canvas.drawCircle(width / 5, height / 2, width / 8, p);
        Paint w = new Paint();
        w.setColor(Color.WHITE);
        // 设置画笔的锯齿效果
        w.setAntiAlias(true);
        canvas.drawCircle(width / 5, height / 2, width / 9, w);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值