如何在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) {
  Draw(canvas);
 }
}
 
我们要重载他的“onDraw”方法,这个方法就是Android框架展现View的时候用来绘制显示内容那个的方法。在此我们将他的所有方法体都删除掉(上面代码红部分删掉),完全将其重写。首先我们要创建一个图片对象,在Android里,所有位图图片都是使用Bitmap类来封装的,我们就先声明一个代表我们刚才图片的一个Bitmap对象,可通过以下方式声明:
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pic);
其中的“getResources()”方法,是有View提供的,可以根据此方法获得我们所有的资源,将来有机会再细说!
        有了bitmap对象,下一步就是将图片画到我们自己的View上了,看上面的“onDraw”方法,其中的参数是“Canvas”对象,其实就是提供了一个画板,有了画板我们就能画任何我们想画的东西了。可以通过调用canvas的方法将图片画到画板上:
        canvas.drawBitmap(bitmap, 0, 0, null);其中的参数分别是“Bitmap对象,Left距离左边界坐标,Top距离上边界坐标,Paint对象”其中的Paint对象,可以做一些额外设置,比如我们要画文字到画板上,就可以通过paint设置其大小,颜,等,也可以设置透明度(即Alpha值)。画图片也可以通过Paint设置其Alpha值,在此我们不演示了,直接传一个空进去。
        通过以上的方式,就可以将图片显示在屏幕上,不过当前我们要修改一下默认Activity的代码,让我们一启动就能看到我们自定义的显示图片的View。在这里我们还是用我们He
lloworld实例中的Activity(HelloAndroid)打开此类,将方法“public void onCreate(Bundle savedInstanceState)”中的内容改为如下:
        Create(savedInstanceState);
        setContentView(new MovingPictureView(this));
十衣素即将当前显示的View设置为我们自定义的View。运行此工程,就会看到如下图所示结果:
图片显示在左上角,现在图片是显示出来了,下一步,我们要让其自动浮动。可以通过不停的改变图片的Left,Top值,再重新画图片达到此效果,如何重画图片呢?View给我们提供了一个名字为“invalidate()”的方法,只要调用此方法,View就会重新调用onDraw方法,重绘该View内容。另外我们创建一个线程,来不停的变换图片的Left,Top值,调用invalidate方法重绘View。实现的全部代码大致如下:
public class MovingPictureView extends View implements Runnable{
 
 //用于显示的图片
 Bitmap bitmap;
 
龟兔赛跑新编400字四年级 //图片坐标转化的线程是否运行,false,则停止运行
 boolean isRuning = true;
 
 //图片的Lfet,Top值
 int left = 0;
 int top = 0;
 
 //用于同步线程
 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() - Width()) ? -dx : dx;
   dy = top < 0 || top > (getHeight() - Height()) ? -dy : dy;
   
   left = left+dx;
   top = top+dy;
   
   handler.post(new Runnable() {
    @Override
    public void run() {
     invalidate();
    }
   });
   
   try {
    Thread.sleep(10);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
}
其中的“handler”是用于线程同步,因为在其他线程中,是不允许直接访问view所在线程中的view对应资源的,如果不加handle,就会抛异常

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。