想用surfaceView去加载一张静态图片。网上查了半天很多都是没有效果的。最后自己研究了一下。可以加载图片了。
package com.showly.autopollrecyclerviewdemo.view;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import com.showly.autopollrecyclerviewdemo.R;
/**
* author : huyawen
* e-mail : 1754397982@qq.com
* time : 2022/01/06
* function:
*/
public class ImageSurface extends SurfaceView {
private static final String TAG = "ImageSurface";
private SurfaceHolder surfaceHolder;
int resId;
float h;
float w;
public void setData(float h, float w, int resId) {
this.h = h;
this.w = w;
this.resId = resId;
surfaceHolder = getHolder();
surfaceHolder.addCallback(callback);
}
private SurfaceHolder.Callback callback = new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
BitmapFactory.Options opts = new BitmapFactory.Options();
Bitmap bitm = BitmapFactory.decodeResource(getResources(), R.drawable.bg, opts);
// 解析图片的头文件
opts.inJustDecodeBounds = true;
// 得到图片高、宽
float imageH = opts.outHeight;
float imageW = opts.outWidth;
System.out.println("图片的高" + imageH);
System.out.println("屏幕的高" + h);
Canvas canvas = holder.lockCanvas();
PaintFlagsDrawFilter pfd= new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
canvas.setDrawFilter(pfd);//解决缩放后图片字体模糊的问题
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId);
// 设置缩放比
Matrix matrix = new Matrix();
matrix.setScale(w / imageW, h / imageH);
canvas.drawBitmap(bitmap, matrix, null);
// 解锁
holder.unlockCanvasAndPost(canvas);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
};
public ImageSurface(Context context) {
this(context, null);
}
public ImageSurface(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ImageSurface(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
package com.showly.autopollrecyclerviewdemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;
import com.showly.autopollrecyclerviewdemo.view.ImageSurface;
public class TestActivity extends AppCompatActivity {
ImageSurface imageSurfaceView;
private SurfaceView sf;
private SurfaceHolder holder;
float h;
float w;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
imageSurfaceView = findViewById(R.id.imgvideo);
sf = findViewById(R.id.sf);
//得到屏幕管理器
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
//屏幕高、宽
h = wm.getDefaultDisplay().getHeight();
w = wm.getDefaultDisplay().getWidth();
imageSurfaceView.setData(h, w, R.drawable.bg);
}
}
将图片替换为自己的drawable里的图片。就可以加载出来。