Android 重绘 View

此刻打盹,你将做梦;而此刻学习,你将圆梦。


今天我们来学习如何重绘View!
所谓的重绘就是重新绘制他的外观(样式),既然要重新绘制,那么首先需要继承 View 类。

extends View

首先,新建一个android项目,我们定义一个类,并继承 View,类名叫:DrawView:

public class DrawView extends View {

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

继承View类以后,我们需要找到View里面用来绘制的函数,仔细找你会找到一个 onDraw(Canvas canvas) 函数,没错这个函数就是用来绘制View外观的函数!
接下来我们重写 onDraw(Canvas canvas) 这个函数:

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

函数里面有一个类:

Canvas

这个类就是用来绘制的,但是仅凭 Canvas 这一个类还不够,我们还需要另一个类:

Paint

通常,我们把Canvas这个类比作 ‘画纸’;把Paint这个类比作 ‘画笔’
这两个类一起合作,就可以绘制图形了。
知道怎么绘制以后,我们来进行实践操作:

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

        Paint paint=new Paint();
        paint.setAntiAlias(true);//设置抗锯齿
        paint.setColor(Color.YELLOW);//设置画笔的颜色
        paint.setStrokeWidth(10);//设置画笔的粗细
        paint.setStyle(Paint.Style.FILL);//设置样式(FILL为填充内部颜色,STROKE为只描边不填充)
        
        /**
         *  画笔选择(设置)好后,我们就可以在纸上(Canvase)画画了
         * 本次实例绘制一个 圆形*/

        canvas.drawCircle(300,300,200,paint);
        
       /**.drawCircle()为绘制一个圆形
        第一个参数为 x 坐标,第二个参数为 y 坐标,第三个为 半径 的大小,,第四个就是把我们设置好的 paint
        */
    }

这样一个简单的重绘View就完成了,接下来就是把他显示出来,在activity_main.xml里面添加一个FrameLayout布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <FrameLayout
        android:id="@+id/framelayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></FrameLayout>
</LinearLayout>

在Mainactivity.java 里面应用我们刚才重绘的View:

	public class MainActivity extends AppCompatActivity {
    private FrameLayout frameLayout;//定义一个FrameLayout
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();
        setContentView(R.layout.activity_main);

        frameLayout = (FrameLayout) findViewById(R.id.framelayout);//初始化 framelayout
        frameLayout.addView(new DrawView(this));//在这里,使用frameLayout的addView函数,把我们刚才重绘的View组件添加进去
    }

}

然后运行程序,如图,我们就创建了一个直径400dp,半径200dp的黄色大圆:

这代码运行结果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值