Android移动图片
16lz
2021-01-23
在Android中,项目目录下的"res\drawable" 用来设置该项目的一些图片资源,那么如何来显示这些图片资源呢?Android中提供了Bitmap来存放这些资源,如果大家对android的画图和Animation还不熟悉的话,可以看这里推荐的文章,介绍比较全面 http://byandby.iteye.com/blog/827527
如下代码可以通过一个资源索引获得其图像对象的Bimmap 关于获取图片位图的2种方法请参见这里 http://byandby.iteye.com/blog/828732
Java代码
然后使用drawBitmap方法将图片显示到屏幕上。如下代码将一个名为bitmap的Bitmap对象显示在( x , y )坐标上。
Java代码 canvas.drawBitmap(bitmap,x,y,null);
Bitmap还提供了一些方法,比如getHeight方法和getWidth方法可以获取这个图片的高度和宽度。下面的示例 将显示怎么使用这些方法。这个示例 实现了 图片移动 可以 上下移动 左右移动,移动到手机屏幕的不同地方。通过手机的上下左右键来控制。我们先来看看运行效果。
下边我们就来看看示例代码吧。
我们一共定义了两个类 其中一个是 Activity01类 用来设置布局
Activity01
Java代码 packagexiaohang.zhimeng;
GameView
Java代码
如下代码可以通过一个资源索引获得其图像对象的Bimmap 关于获取图片位图的2种方法请参见这里 http://byandby.iteye.com/blog/828732
Java代码
- ((BitmapDrawable)getResources().getDrawable(索引资源)).getBitmap()
((BitmapDrawable) getResources().getDrawable(索引资源)).getBitmap()这样就可以得到图片资源的Bitmap对象了。
然后使用drawBitmap方法将图片显示到屏幕上。如下代码将一个名为bitmap的Bitmap对象显示在( x , y )坐标上。
Java代码 canvas.drawBitmap(bitmap,x,y,null);
canvas.drawBitmap(bitmap, x, y, null);
Bitmap还提供了一些方法,比如getHeight方法和getWidth方法可以获取这个图片的高度和宽度。下面的示例 将显示怎么使用这些方法。这个示例 实现了 图片移动 可以 上下移动 左右移动,移动到手机屏幕的不同地方。通过手机的上下左右键来控制。我们先来看看运行效果。
下边我们就来看看示例代码吧。
我们一共定义了两个类 其中一个是 Activity01类 用来设置布局
Activity01
Java代码 packagexiaohang.zhimeng;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.view.KeyEvent;
- publicclassActivity01extendsActivity{
- privateGameViewmGameView=null;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- mGameView=newGameView(this);
- setContentView(mGameView);
- }
- publicbooleanonKeyDown(intkeyCode,KeyEventevent){
- if(mGameView==null){
- returnfalse;
- }
- returnmGameView.onKeyDown(keyCode,event);
- }
- }
GameView
Java代码
- packagexiaohang.zhimeng;
- importandroid.content.Context;
- importandroid.graphics.Bitmap;
- importandroid.graphics.Canvas;
- importandroid.graphics.Color;
- importandroid.graphics.Paint;
- importandroid.graphics.Rect;
- importandroid.graphics.drawable.BitmapDrawable;
- importandroid.view.KeyEvent;
- importandroid.view.MotionEvent;
- importandroid.view.View;
- publicclassGameViewextendsViewimplementsRunnable{
- //声明Paint对象
- privatePaintmPaint=null;
- //创建两个图片对象
- BitmapmBitmapQQ=null;
- BitmapmBitDestTop=null;
- intmiDTX=0;
- intmiDTY=0;
- publicGameView(Contextcontext){
- super(context);
- mPaint=newPaint();
- miDTX=0;//代表图片左边的横坐标用来左右移动图片
- miDTY=170;//代表图片上边的纵坐标用来上下移动图片
- /*从资源文件中装载图片*/
- //getResources()-->得到Resources
- //getDrawable()-->得到资源中的Drawable对象,参数为资源索引ID
- //getBitmap()-->得到Bitmap
- mBitmapQQ=((BitmapDrawable)getResources().getDrawable(R.drawable.xh))
- .getBitmap();
- mBitDestTop=((BitmapDrawable)getResources().getDrawable(
- R.drawable.chrysler)).getBitmap();
- newThread(this).start();
- }
- @Override
- protectedvoidonDraw(Canvascanvas){
- super.onDraw(canvas);
- /*清屏效果*/
- canvas.drawColor(Color.GRAY);
- /*在屏幕(0,0)处绘制图片mBitQQ*/
- GameView.drawImage(canvas,mBitmapQQ,0,0);
- /*在指定位置按指定裁剪的区域进行绘制*/
- //getWidth()-->得到图片的宽度
- //getHeight()-->得到图片的高度
- GameView.drawImage(canvas,mBitDestTop,miDTX,miDTY,mBitDestTop
- .getWidth(),mBitDestTop.getHeight(),0,0);
- }
- //触笔事件
- publicbooleanonTouchEvent(MotionEventevent){
- returntrue;
- }
- //按键按下事件
- publicbooleanonKeyDown(intkeyCode,KeyEventevent){
- //左方向键
- if(keyCode==KeyEvent.KEYCODE_DPAD_LEFT){
- if(miDTX>0){
- miDTX-=4;
- }
- }
- //右方向键
- elseif(keyCode==KeyEvent.KEYCODE_DPAD_RIGHT){
- if(miDTX+mBitDestTop.getWidth()<320){
- miDTX+=4;
- }
- }
- //上方向键
- elseif(keyCode==KeyEvent.KEYCODE_DPAD_UP){
- if(miDTY>0){
- //miDTY+mBitDestTop.getHeight()<450
- miDTY-=4;
- }
- }
- //下方向键
- elseif(keyCode==KeyEvent.KEYCODE_DPAD_DOWN){
- if(miDTY<322){
- miDTY+=4;
- }
- }
- returntrue;
- }
- //按键弹起事件
- publicbooleanonKeyUp(intkeyCode,KeyEventevent){
- returnfalse;
- }
- publicbooleanonKeyMultiple(intkeyCode,intrepeatCount,KeyEventevent){
- returntrue;
- }
- //线程处理
- @Override
- publicvoidrun(){
- while(!Thread.currentThread().isInterrupted()){
- try{
- Thread.sleep(100);
- }catch(InterruptedExceptione){
- Thread.currentThread().interrupt();
- }
- //使用postInvalidate可以直接在线程中更新界面
- postInvalidate();
- }
- }
- /*---------------------------------
- *绘制图片
- *@paramx屏幕上的x坐标
- *@paramy屏幕上的y坐标
- *@paramw要绘制的图片的宽度
- *@paramh要绘制的图片的高度
- *@parambx图片上的x坐标
- *@paramby图片上的y坐标
- *
- *@returnnull
- ------------------------------------*/
- publicstaticvoiddrawImage(Canvascanvas,Bitmapblt,intx,inty,
- intw,inth,intbx,intby){
- Rectsrc=newRect();//图片>>原矩形
- Rectdst=newRect();//屏幕>>目标矩形
- src.left=bx;
- src.top=by;
- src.right=bx+w;
- src.bottom=by+h;
- dst.left=x;
- dst.top=y;
- dst.right=x+w;
- dst.bottom=y+h;
- //画出指定的位图,位图将自动--》缩放/自动转换,以填补目标矩形
- //这个方法的意思就像将一个位图按照需求重画一遍,画后的位图就是我们需要的了
- canvas.drawBitmap(blt,null,dst,null);
- src=null;
- dst=null;
- }
- /**
- *绘制一个Bitmap
- *
- *@paramcanvas
- *画布
- *@parambitmap
- *图片
- *@paramx
- *屏幕上的x坐标
- *@paramy
- *屏幕上的y坐标
- */
- publicstaticvoiddrawImage(Canvascanvas,Bitmapbitmap,intx,inty){
- //绘制图像将bitmap对象显示在坐标x,y上
- canvas.drawBitmap(bitmap,x,y,null);
- }
- }
更多相关文章
- 今天给大家分享一下Android中的资源与国际化的问题
- Android系统资源
- Android中资源文件的使用
- android资源
- Android上传图片到七牛云看这篇就够了
- Android工程中R.java文件的重新生成——注意资源文件的错误