如何在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,就会抛异常

本文来源:https://www.bwwdw.com/article/9sj4.html

Top