android中如何显示图片的一部分

本文介绍了一个Android应用案例,展示了如何加载一张图片并将其特定部分(100*100像素大小)显示在屏幕中央的方法。通过计算缩放比例及使用Matrix对象进行图片变换,实现了图片填充屏幕的同时精确展示所需部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:张宗硕


在android应用程序中加载一张图片,然后把它显示出来这是一件非常容易的事情,那怎么才能显示一张图片的一小部分呢,一种做法是把图片ps一下,要显示的那部分单独存成一张图片,然后程序中加载它,并把它显示出来。但这样会增加程序的图片量。对一张完整的图,用程序去切割你想要的那部分也是很简单的。

下面实现的一个程序,是加载了一张图片,然后经过变换让图片填充到手机的整个屏幕,然后在屏幕的中间显示图片中间的100*100的部分。

ShowPoritionPictureActivity代码:


[java] view plain copy
  1. <spanstyle="font-size:16px;">packagecom.iwin.zzs;
  2. importandroid.app.Activity;
  3. importandroid.graphics.Bitmap;
  4. importandroid.graphics.BitmapFactory;
  5. importandroid.graphics.Matrix;
  6. importandroid.os.Bundle;
  7. importandroid.util.DisplayMetrics;
  8. importandroid.view.WindowManager;
  9. publicclassShowPoritionPictureActivityextendsActivity{
  10. /**Calledwhentheactivityisfirstcreated.*/
  11. BitmappicRes;
  12. BitmapshowPic;
  13. //获取原图片的宽和高
  14. intpicWidth;
  15. intpicHeight;
  16. privatePoritionViewporitonView=null;
  17. @Override
  18. publicvoidonCreate(BundlesavedInstanceState){
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.main);
  21. //不显示状态栏
  22. this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
  23. DisplayMetricsdm=newDisplayMetrics();
  24. this.getWindowManager().getDefaultDisplay().getMetrics(dm);
  25. //得到屏幕的长和宽
  26. intscreenWidth=dm.widthPixels;//水平分辨率
  27. intscreenHeight=dm.heightPixels;//垂直分辨率
  28. picRes=BitmapFactory.decodeResource(this.getResources(),R.drawable.girl);
  29. //得到图片的长和宽
  30. picWidth=picRes.getWidth();
  31. picHeight=picRes.getHeight();
  32. //计算缩放率,新尺寸除原始尺寸
  33. floatscaleWidth=((float)screenWidth)/picWidth;
  34. floatscaleHeight=((float)screenHeight)/picHeight;
  35. //创建操作图片用的matrix对象
  36. Matrixmatrix=newMatrix();
  37. //缩放图片动作
  38. matrix.postScale(scaleWidth,scaleHeight);
  39. //新得到的图片是原图片经过变换填充到整个屏幕的图片
  40. BitmappicNewRes=Bitmap.createBitmap(picRes,0,0,picWidth,picHeight,matrix,true);
  41. //bitmap=Bitmap.createBitmap(400,480,Bitmap.Config.ARGB_8888);
  42. //canvas=newCanvas();
  43. //canvas.setBitmap(bitmap);
  44. showPic=Bitmap.createBitmap(picNewRes,screenWidth/2-50,screenHeight/2-50,100,100);
  45. poritonView=newPoritionView(this);
  46. poritonView.setBitmapShow(showPic,screenWidth/2-50,screenHeight/2-50);
  47. setContentView(poritonView);
  48. }
  49. </span>


新建PoritionView类代码:


[java] view plain copy
  1. <spanstyle="font-size:16px;">packagecom.iwin.zzs;
  2. importandroid.content.Context;
  3. importandroid.graphics.Bitmap;
  4. importandroid.graphics.Canvas;
  5. importandroid.view.View;
  6. publicclassPoritionViewextendsView{
  7. privateBitmapshowPic=null;
  8. privateintstartX=0;
  9. privateintstartY=0;
  10. publicPoritionView(Contextcontext){
  11. super(context);
  12. //TODOAuto-generatedconstructorstub
  13. }
  14. @Override
  15. protectedvoidonDraw(Canvascanvas){
  16. //TODOAuto-generatedmethodstub
  17. super.onDraw(canvas);
  18. canvas.drawBitmap(showPic,startX,startY,null);
  19. }
  20. publicvoidsetBitmapShow(Bitmapb,intx,inty)
  21. {
  22. showPic=b;
  23. startX=x;
  24. startY=y;
  25. }
  26. }
  27. </span>


在工程res/drawable里面添加图片gir.png,运行程序的效果是只显示图片的中间100*100的那部分图片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值