自定义view的使用(一)

落爺英雄遲暮 提交于 2019-11-28 08:39:55

记录第一次写博客

希望可以一直坚持,哈哈哈哈!小黑菜的变白之路。

  1. public class MyView extends View: 定义MyView类继承View;
    MyView所在位置
    2.在xml文件里引入完整包名,
    代码
<com.example.myapplication1.MyView
       android:id="@+id/smileview"
       android:background="#FF0000"
       android:layout_gravity="center_vertical"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"/>

安装界面绘制流程:
measure( 测量控件大小),layout(摆设控件),draw(在view中绘画)。
View中方法
onMeasure()(指定自己的宽高)——>onDraw()(绘制自己的内容)
ViewGroup中方法
onMeasure()(指定自己的宽高和所有子View的宽高) ——> onLayout() (摆放所有子view)——> onDraw()(绘制内容)
MyView代码如下:

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class MyView extends View {

    private Bitmap backgroundBitmap;
    private Bitmap carBitmap;
    private Paint paint;
    private boolean place = false;

    public MyView(Context context) {
        super(context);
    }
    public MyView(Context context, AttributeSet attr){
        super(context,attr);
        paint = new Paint();
    }
    public MyView(Context context, AttributeSet attr,int defStyle){
        super(context,attr,defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//        super.onMeasure(widthMeasureSpec, heightMeasureSpec);不用此方法,重写父类的方法
        setMeasuredDimension(backgroundBitmap.getWidth(),backgroundBitmap.getHeight());
    }

    @Override
    protected void onDraw(Canvas canvas) {//Canvas画板,先绘制在下面
        super.onDraw(canvas);

        canvas.drawBitmap(backgroundBitmap,0,50,paint);
        if(place){//右侧
            int roadlong = backgroundBitmap.getWidth() - carBitmap.getWidth();

            canvas.drawBitmap(carBitmap,roadlong,0,paint);
        }else{//左侧
            canvas.drawBitmap(carBitmap,0,0,paint);
        }

    }
    public void setTarget(int target) {
        backgroundBitmap = BitmapFactory.decodeResource(getResources(),target);
    }

    public void setImage(int slideImage) {
        carBitmap = BitmapFactory.decodeResource(getResources(),slideImage);
    }

    public void setState(boolean place) {
    this.place = place;
    }
}

Bitmap位图包括像素以及长、宽、颜色等描述信息。长宽和像素位数是用来描述图片的,可以通过这些信息计算出图片的像素占用内存的大小。

位图可以理解为一个画架,把图放到上面然后可以对图片做一些列的处理。

位图文件图像显示效果好,但是非压缩格式,需要占用较大的存储空间。
BitmapFactory中的decodeResource表示从资源中读取
**BitmapFactory.decodeResource(?,?)**这个带两个参数的方法:第一个参数是包含你要加载的位图资源文件的对象(一般写成 getResources()就ok了);第二个时你需要加载的位图资源的Id
**BitmapFactory.decodeResource(?,?,?)**带三个参数的方法:前两个和上面的方法一样。第三个参数应该是对你要加载的位图是否需要完整显示,如果你只需要部分,可以在这里定制。

链接: 安卓 Bitmap详解.

今天也喜欢我家大虫.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!