Android 响应键盘移动图标

本文详细探讨了在Android应用中如何监听并处理键盘弹出和隐藏时,应用布局图标的位置调整。通过深入理解Activity的生命周期和窗口管理,你将学会使用构造函数、线程以及事件监听来实现这一功能,同时避免常见的null指针和类型错误。
摘要由CSDN通过智能技术生成

package rw.SurFace;


import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceView;

public class Surfaecview01Activity extends Activity {
    /** Called when the activity is first created. */
	DisplayMetrics sMetrics;
	 Thread maintThread;
	 MysurfaceView view;
	 boolean up,down,right,left;
	class MysurfaceView extends SurfaceView implements Runnable{
        Bitmap bitmap;
       
        Paint paint=new Paint();
        long time;
        int Coord_x,Coord_y;
        int x,y;
		public MysurfaceView(Context context) {
			super(context);
			// TODO Auto-generated constructor stub
			
			setFocusable(true);//可以聚焦
			bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.a);
			paint.setColor(Color.BLUE);
			paint.setTextSize(20);
			x=bitmap.getWidth();
			y=bitmap.getHeight()/2;
			maintThread=new Thread(this);
			maintThread.start();
		}

		@Override
		public void run() {
			// TODO Auto-generated method stub
			while (true) {
				DoDraw();
			}
		}
		 void DoDraw()
		    {
		    	Canvas canvas=getHolder().lockCanvas();
		    	if (canvas!=null) {
					canvas.drawColor(Color.WHITE);
					if (up) Coord_y--;
					if(down) Coord_y++;
					if(left) Coord_x--;
					if (right) Coord_x++;
					canvas.drawBitmap(bitmap, Coord_x*10, Coord_y*10, null);
					
					long now=System.currentTimeMillis();
					canvas.drawText(""+1000/(now-time)+"fps", x, y, paint);
					time=now;
					getHolder().unlockCanvasAndPost(canvas);
				}
		    }
	}
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sMetrics=new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(sMetrics);
        /*
         * 获取屏幕大小
         */
		int Met_X=sMetrics.widthPixels;
		int Met_Y=sMetrics.heightPixels;
		Log.i("X--------->", Met_X+"");
		Log.i("Y--------->", Met_Y+"");
        setContentView(new MysurfaceView(this));
    }
	
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		switch (keyCode) {
		case KeyEvent.KEYCODE_DPAD_UP:
			up=true;
			break;
        case KeyEvent.KEYCODE_DPAD_DOWN:
        	down=true;
        	break;
        case KeyEvent.KEYCODE_DPAD_LEFT:
        	left=true;
        	break;
        case KeyEvent.KEYCODE_DPAD_RIGHT:
        	right=true;
        	break;
		default:
			break;
		}
		return super.onKeyDown(keyCode, event);
	}
	
	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		switch (keyCode) {
		case KeyEvent.KEYCODE_DPAD_UP:
			up=false;
			break;
        case KeyEvent.KEYCODE_DPAD_DOWN:
        	down=false;
        	break;
        case KeyEvent.KEYCODE_DPAD_LEFT:
        	left=false;
        	break;
        case KeyEvent.KEYCODE_DPAD_RIGHT:
        	right=false;
        	break;
		default:
			break;
		}
		return super.onKeyUp(keyCode, event);
	}

	/* (non-Javadoc)
	 * @see android.app.Activity#onDestroy()
	 */
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		Thread.interrupted();
		super.onDestroy();
	}
   
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值