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>
現在已經有解決辦法了,不過感覺不應該這樣子解決的!!
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- test.onKeyDown(keyCode, event);
- return super.onKeyDown(keyCode, event);
- }
- 已經把最新的代碼附件了!!
@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


