自定义View
记录第一次写博客
希望可以一直坚持,哈哈哈哈!小黑菜的变白之路。
- public class MyView extends View: 定义MyView类继承View;
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详解.
今天也喜欢我家大虫.
来源:https://blog.csdn.net/qq_44331582/article/details/100046365