文档章节

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

Jonson
 Jonson
发布于 2015/02/26 17:09
字数 596
阅读 127
收藏 10

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

分类: Android应用开发系列教程 Android应用开发技巧 2012-04-25 23:42 1728人阅读 评论(0) 收藏 举报

androidmatrixfloatconstructorclassnull

作者:张宗硕      


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

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

ShowPoritionPictureActivity代码:


package com.iwin.zzs;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.WindowManager;

public class ShowPoritionPictureActivity extends Activity {
    /** Called when the activity is first created. */
	Bitmap picRes;
	
	Bitmap showPic;
	
	//获取原图片的宽和高
    int picWidth;
    int picHeight;
    
    private PoritionView poritonView = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        // 不显示状态栏
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        DisplayMetrics dm = new DisplayMetrics();
		this.getWindowManager().getDefaultDisplay().getMetrics(dm);
		
		// 得到屏幕的长和宽
		int screenWidth = dm.widthPixels;                //水平分辨率
		int screenHeight = dm.heightPixels;              //垂直分辨率
		
		
        picRes = BitmapFactory.decodeResource(this.getResources(), R.drawable.girl);
        // 得到图片的长和宽
        picWidth = picRes.getWidth();
	    picHeight = picRes.getHeight();
        
	    // 计算缩放率,新尺寸除原始尺寸
	    float scaleWidth = ((float) screenWidth ) / picWidth;
	    float scaleHeight = ((float) screenHeight ) / picHeight;
		
	    // 创建操作图片用的matrix对象
	    Matrix matrix = new Matrix();
	    // 缩放图片动作
	    matrix.postScale(scaleWidth, scaleHeight);
	    // 新得到的图片是原图片经过变换填充到整个屏幕的图片
	    Bitmap picNewRes = Bitmap.createBitmap(picRes, 0, 0,picWidth, picHeight, matrix, true);
	    // bitmap = Bitmap.createBitmap(400, 480, Bitmap.Config.ARGB_8888);
		// canvas=new Canvas();         
		// canvas.setBitmap(bitmap); 
		
	    showPic = Bitmap.createBitmap(picNewRes, screenWidth/2-50, screenHeight/2-50, 100, 100);
	    
	    poritonView = new PoritionView(this);
	    poritonView.setBitmapShow(showPic, screenWidth/2-50, screenHeight/2-50);
	    setContentView(poritonView);
    }



   新建PoritionView类代码:


package com.iwin.zzs;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.view.View;

public class PoritionView extends View {
	private Bitmap showPic = null;
	private int startX = 0;
	private int startY = 0;
	public PoritionView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}

	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		super.onDraw(canvas);
		canvas.drawBitmap(showPic, startX, startY, null);
	}
	public void setBitmapShow(Bitmap b, int x, int y)
	{
		showPic = b;
		startX = x;
		startY = y;
	}
}



 

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



本文转载自:http://cache.baiducontent.com/c?m=9d78d513d9901df918b0cf281a16a671682097153ac0a16668a4e45f92144c3...

共有 人打赏支持
Jonson
粉丝 21
博文 131
码字总数 17942
作品 0
肇庆
私信 提问
android TextView属性详解

RelativeLayout用到的一些重要的属性: 第一类:属性值为true或false android:layoutcenterHrizontal 水平居中 android:layoutcenterVertical 垂直居中 android:layoutcenterInparent 相对于父...

mutouzhang
2014/03/19
0
0
Android Relativelayout

RelativeLayout:相对布局,这是最自由的布局,开发者可以自己配置控件的位置。 RelativeLayout 有几个重要的属性: 第一类:属性值为true或false android:layoutcenterHrizontal 水平居中 an...

amigos_wu
2012/06/07
0
0
android XML布局大全

第一类:属性值为true或false android:layoutcenterHrizontal 水平居中 android:layoutcenterVertical 垂直居中 android:layoutcenterInparent 相对于父元素完全居中 android:layoutalignPar......

牛牛张
2015/07/09
0
0
Android ImageView图片显示点击背景切换

一.介绍 ImageView用来显示任意图像图片,可以自己定义显示尺寸,显示颜色等等. 二.XML属性 android:adjustViewBounds 是否保持宽高比。需要与maxWidth、MaxHeight一起使用,单独使用没有效果...

amigos_wu
2012/05/25
0
0
Android开发优化之——对Bitmap的内存优化

在Android应用里,最耗费内存的就是图片资源。而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常。所以,对于图片的内存优...

KingMing
2015/04/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Node 框架接入 ELK 实践总结

我们都有过上机器查日志的经历,当集群数量增多的时候,这种原始的操作带来的低效率不仅给我们定位现网问题带来极大的挑战,同时,我们也无法对我们服务框架的各项指标进行有效的量化诊断,更...

嫣然丫丫丫
32分钟前
1
0
PostgreSQL 调用 Rust 函数内存耗用研究

开始看 PostgreSQL 的文档,以为对于那些 .so 形式的二进制扩展函数,比如用 C 语言编写的、Rust 编写的等,PG 会把它们装载到每个连接的内存里去。 因为 Rust 现在编译出来的二进制文件还比...

helloclia
32分钟前
2
0
HTTP Authorization Base64 验证

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.nio.charset.Charset;import java.util.B......

laolin23
33分钟前
1
0
Spring Cloud Finchley.SR1 的学习与应用 7 - 服务容错保护 Hystrix

Hystrix 分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况,这种现象被称为服务雪崩效应。为了应对服务雪崩,一种常见的做法是手动服务降级。而 Hystrix 的出现,给我们提...

张shieppp
36分钟前
2
0
PHP利用多进程处理任务(一篇写得比较容易理解的多进程文章)

 PHP多进程一般应用在PHP_CLI命令行中执行php脚本,不要在web访问时使用。   多进程处理分解任务一般要比单进程更快。 php查看是否安装多进程模块: php -m | grep pcntl (pcntl是proce...

hansonwong
37分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部