自定义View

来源:互联网 发布:linux execl 返回值 编辑:程序博客网 时间:2024/06/03 14:59

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);    }}

2 0