作者:张宗硕
在android应用程序中加载一张图片,然后把它显示出来这是一件非常容易的事情,那怎么才能显示一张图片的一小部分呢,一种做法是把图片ps一下,要显示的那部分单独存成一张图片,然后程序中加载它,并把它显示出来。但这样会增加程序的图片量。对一张完整的图,用程序去切割你想要的那部分也是很简单的。
下面实现的一个程序,是加载了一张图片,然后经过变换让图片填充到手机的整个屏幕,然后在屏幕的中间显示图片中间的100*100的部分。
ShowPoritionPictureActivity代码:
- <spanstyle="font-size:16px;">packagecom.iwin.zzs;
- importandroid.app.Activity;
- importandroid.graphics.Bitmap;
- importandroid.graphics.BitmapFactory;
- importandroid.graphics.Matrix;
- importandroid.os.Bundle;
- importandroid.util.DisplayMetrics;
- importandroid.view.WindowManager;
- publicclassShowPoritionPictureActivityextendsActivity{
- /**Calledwhentheactivityisfirstcreated.*/
- BitmappicRes;
- BitmapshowPic;
- //获取原图片的宽和高
- intpicWidth;
- intpicHeight;
- privatePoritionViewporitonView=null;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //不显示状态栏
- this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
- DisplayMetricsdm=newDisplayMetrics();
- this.getWindowManager().getDefaultDisplay().getMetrics(dm);
- //得到屏幕的长和宽
- intscreenWidth=dm.widthPixels;//水平分辨率
- intscreenHeight=dm.heightPixels;//垂直分辨率
- picRes=BitmapFactory.decodeResource(this.getResources(),R.drawable.girl);
- //得到图片的长和宽
- picWidth=picRes.getWidth();
- picHeight=picRes.getHeight();
- //计算缩放率,新尺寸除原始尺寸
- floatscaleWidth=((float)screenWidth)/picWidth;
- floatscaleHeight=((float)screenHeight)/picHeight;
- //创建操作图片用的matrix对象
- Matrixmatrix=newMatrix();
- //缩放图片动作
- matrix.postScale(scaleWidth,scaleHeight);
- //新得到的图片是原图片经过变换填充到整个屏幕的图片
- BitmappicNewRes=Bitmap.createBitmap(picRes,0,0,picWidth,picHeight,matrix,true);
- //bitmap=Bitmap.createBitmap(400,480,Bitmap.Config.ARGB_8888);
- //canvas=newCanvas();
- //canvas.setBitmap(bitmap);
- showPic=Bitmap.createBitmap(picNewRes,screenWidth/2-50,screenHeight/2-50,100,100);
- poritonView=newPoritionView(this);
- poritonView.setBitmapShow(showPic,screenWidth/2-50,screenHeight/2-50);
- setContentView(poritonView);
- }
- </span>
新建PoritionView类代码:
- <spanstyle="font-size:16px;">packagecom.iwin.zzs;
- importandroid.content.Context;
- importandroid.graphics.Bitmap;
- importandroid.graphics.Canvas;
- importandroid.view.View;
- publicclassPoritionViewextendsView{
- privateBitmapshowPic=null;
- privateintstartX=0;
- privateintstartY=0;
- publicPoritionView(Contextcontext){
- super(context);
- //TODOAuto-generatedconstructorstub
- }
- @Override
- protectedvoidonDraw(Canvascanvas){
- //TODOAuto-generatedmethodstub
- super.onDraw(canvas);
- canvas.drawBitmap(showPic,startX,startY,null);
- }
- publicvoidsetBitmapShow(Bitmapb,intx,inty)
- {
- showPic=b;
- startX=x;
- startY=y;
- }
- }
- </span>
在工程res/drawable里面添加图片gir.png,运行程序的效果是只显示图片的中间100*100的那部分图片。