閱讀876 返回首頁    go 阿裏雲 go 技術社區[雲棲]


android 自定義 View 中 onKeyDown 沒反應

我寫了一個自定義的view,裏麵用handler做了一個循環,在循環的過程中,我點擊左右鍵怎麼沒有反應
我想要的結果是:循環打印 begin 和 handler, 當按下左右鍵是打印:Left 和 Right
我把我的工程附件上來了
請兄弟們指出原因,給出解決辦法
下麵是我的代碼:

TestHandler 是一個activity

package cn.com.android;

import android.app.Activity;
import android.os.Bundle;

public class TestHandler extends Activity {
	private ManTest test;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        test = (ManTest) findViewById(R.id.manTest);
        test.begin();
    }
}

這個是自定義View 

package cn.com.android;

import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;

public class ManTest extends View{
	public ManTest(Context context, AttributeSet attrs) {
		super(context, attrs);
	}
	
	public ManTest(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if(keyCode ==KeyEvent.KEYCODE_DPAD_LEFT){
			System.out.println("KEY------>   Left");
		}
		if(keyCode ==KeyEvent.KEYCODE_DPAD_RIGHT){
			System.out.println("KEY------>   Right");
		}
		return super.onKeyDown(keyCode, event);
	}
	private RefreshHandler handler = new RefreshHandler();
	class RefreshHandler extends Handler {

        @Override
        public void handleMessage(Message msg) {
        	System.out.println("Handler");
            begin();
            ManTest.this.invalidate();
        }

        public void sleep(long delayMillis) {
        	this.removeMessages(0);
            sendMessageDelayed(obtainMessage(0), delayMillis);
        }
    };
	public void begin(){
		System.out.println("Begin");
		handler.sleep(1000);
	}

}

main.xml 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:andro
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<cn.com.android.ManTest android: 
	android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
	/>
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
</LinearLayout>

現在已經有解決辦法了,不過感覺不應該這樣子解決的!!
Java代碼 複製代碼 收藏代碼
  1. @Override  
  2.     public boolean onKeyDown(int keyCode, KeyEvent event) {   
  3.         test.onKeyDown(keyCode, event);   
  4.         return super.onKeyDown(keyCode, event);   
  5.     }   
  6. 已經把最新的代碼附件了!!  
@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		test.onKeyDown(keyCode, event);
		return super.onKeyDown(keyCode, event);
	}
已經把最新的代碼附件了!!

像smaple中貪吃蛇遊戲就沒有在activity中重寫onkeydown方法 



最後更新:2017-04-02 16:48:06

  上一篇:go SVN提示文件被鎖住以及Unlocker軟件的使用
  下一篇:go svn對項目權限進行管理