如何在android程序中显示图片
更新时间:2023-05-21 23:48:01 阅读量: 实用文档 文档下载
在android程序中显示图片
我们做Android 程序的时候,有时候需要显示图片在界面上,这里我们将实现一个将图片展示到手机屏幕,并让其不停的浮动的效果!
首先我们要先准备一张图片,在这里我准备了一张图片,如下:
将此图片放到文件夹"res->drawable-*dpi"下,记得,三个文件夹都要放,因为系统会根据不同的分辨率去取不同的图片,如果有的没放,在某些分辨率下,会找不到资源。将此图片重命名为“pic.png”,在R.java里的drawable类里会生成一个pic的常量。
图片要显示,就是要容器可以让其显示,因为所有的Android的UI组件都是继承自View,View也实现了Drawable接口,所以在此,我们也重新定义一个View让其用来显示我们的这张图片,并让这张图片浮动。我们创建一个在包“org.leo.bitmap”下的,类名为“MovingPictureView”的类,该类继承自android.view.View。此类目前代码大致如下:
public class MovingPictureView extends View {
public MovingPictureView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
}
我们要重载他的“onDraw”方法,这个方法就是Android框架展现View的时候用来绘制显示内容那个的方法。在此我们将他的所有方法体都删除掉(上面代码红色部分删掉),完全将其重写。首先我们要创建一个图片对象,在Android里,所有位图图片都是使用Bitmap类来封装的,我们就先声明一个代表我们刚才图片的一个Bitmap对象,可通过以下方式声明:
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pic);
其中的“getResources()”方法,是有View提供的,可以根据此方法获得我们所有的资源,将来有机会再细说!
在android程序中显示图片
有了bitmap对象,下一步就是将图片画到我们自己的View上了,看上面的“onDraw”方法,其中的参数是“Canvas”对象,其实就是提供了一个画板,有了画板我们就能画任何我们想画的东西了。可以通过调用canvas的方法将图片画到画板上:
canvas.drawBitmap(bitmap, 0, 0, null);其中的参数分别是“Bitmap对象,Left距离左边界坐标,Top距离上边界坐标,Paint对象”其中的Paint对象,可以做一些额外设置,比如我们要画文字到画板上,就可以通过paint设置其大小,颜色,等,也可以设置透明度(即Alpha值)。画图片也可以通过Paint设置其Alpha值,在此我们不演示了,直接传一个空进去。
通过以上的方式,就可以将图片显示在屏幕上,不过当前我们要修改一下默认Activity的代码,让我们一启动就能看到我们自定义的显示图片的View。在这里我们还是用我们Helloworld实例中的Activity(HelloAndroid)打开此类,将方法“public void onCreate(Bundle savedInstanceState)”中的内容改为如下:
super.onCreate(savedInstanceState);
setContentView(new MovingPictureView(this));
即将当前显示的View设置为我们自定义的View。运行此工程,就会看到如下图所示结果:
在android程序中显示图片
图片显示在左上角,现在图片是显示出来了,下一步,我们要让其自动浮动。可以通过不停的改变图片的Left,Top值,再重新画图片达到此效果,如何重画图片呢?View给我们提供了一个名字为“invalidate()”的方法,只要调用此方法,View就会重新调用onDraw方法,重绘该View内容。另外我们创建一个线程,来不停的变换图片的Left,Top值,调用invalidate方法重绘View。实现的全部代码大致如下:
public class MovingPictureView extends View implements Runnable{
//用于显示的图片
Bitmap bitmap;
//图片坐标转化的线程是否运行,false,则停止运行
boolean isRuning = true;
//图片的Lfet,Top值
int left = 0;
int top = 0;
在android程序中显示图片
//用于同步线程
Handler handler;
//向量,可以通过调节此两个变量调节移动速度
int dx = 1;
int dy = 1;
public MovingPictureView(Context context) {
super(context);
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pic); handler = new Handler();
new Thread(this).start();
}
@Override
protected void onDraw(Canvas canvas) {
//将图画到画板上
canvas.drawBitmap(bitmap, left,top, null);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
isRuning = false;//当点击屏幕,则将图片浮动停止
return true;
}
@Override
public void run() {
while(isRuning){
//通过调节向量,来控制方向
dx = left < 0 || left > (getWidth() - bitmap.getWidth()) ? -dx : dx; dy = top < 0 || top > (getHeight() - bitmap.getHeight()) ? -dy : dy;
left = left+dx;
top = top+dy;
handler.post(new Runnable() {
@Override
public void run() {
invalidate();
}
});
在android程序中显示图片
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
其中的“handler”是用于线程同步,因为在其他线程中,是不允许直接访问view所在线程中的view对应资源的,如果不加handle,就会抛异常
正在阅读:
如何在android程序中显示图片05-21
网络编辑选择关键词的几个关键因素06-05
告示栏的一角作文400字07-04
初中英语新课程标准词汇及短语表03-24
“国培计划”初中美术教师远程培训学习心得08-06
SAPBAPI函数使用及示例01-11
2013中考数学第一轮总复习基础题(活页42课时)第1课时实数的有关04-10
简易数字频率计设计05-16
氨区泄漏预案12-14
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 何在
- android
- 程序
- 显示
- 图片
- 西方政治制度单选多选名词解释
- 2016年河北国企招聘国家电网公司信息通信分公司
- 一种改进的Canny边缘检测算法
- 如何设计排水网管项目可行性研究报告评审方案(2013年发改委立项详细标准及甲级案例范文)
- (本科类)专业-金融学和金融工程-金融学研究生的热门专业
- 学习经济法的体会
- 生物质能建设项目建设前期工作介绍
- 2010年《福布斯》中国富豪排行榜简介
- 凯程洪同学:2016年北京师范大学学前教育学考研心得交流
- 小议水利工程隧洞施工技术
- 网站设计教学大纲
- 浅谈高职院校实验室的建设和管理
- 第1章C++的初步知识
- 社会管理综合治理培训材料
- 北京大学高级管理人员EMBA苏州研修班
- 大一思修期末考试试论述题参考答案
- 潍坊市企业职工生育医疗费联网证明
- 个人SWOT分析报告
- 呼吸道传染病发病情况分析
- 巧借交通网络化东风,打造经济增长新亮点