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:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<cn.com.android.ManTest android:id="@+id/manTest"
	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方法 

时间: 2024-09-15 09:56:56

android 自定义 View 中 onKeyDown 没反应的相关文章

Android自定义View中attrs.xml的实例详解

Android自定义View中attrs.xml的实例详解 我们在自定义View的时候通常需要先完成attrs.xml文件 在values中定义一个attrs.xml 然后添加相关属性 这一篇先详细介绍一下attrs.xml的属性. <?xml version="1.0" encoding="utf-8"?> <resources> //自定义属性名,定义公共属性 <attr name="titleText" for

Android自定义View中Paint、Rect、Canvas介绍(一)

自定义View对于新手而言貌似是一个很复杂的东西.格式,各函数的意义.对于大神经常忘记各函数及一些参数的具体写法及意义,刚好在做一个风车效果,把过程及遇到的问题都写下来 1.如何自定义一个View public class LeafView extends View { private String TAG = "--------LeafView"; public LeafView(Context context, AttributeSet attrs) { super(context

Android自定义View之圆形进度条总结

最近撸了一个圆形进度条的开源项目,算是第一次完完整整的使用自定义 View .在此对项目开发思路做个小结,欢迎大家 Star 和 Fork. 该项目总共实现了三种圆形进度条效果 CircleProgress:圆形进度条,可以实现仿 QQ 健康计步器的效果,支持配置进度条背景色.宽度.起始角度,支持进度条渐变 DialProgress:类似 CircleProgress,但是支持刻度 WaveProgress:实现了水波纹效果的圆形进度条,不支持渐变和起始角度配置,如需此功能可参考 CircleP

android-Android 自定义view中可以改变activity的数据吗?或者说传值给Activity

问题描述 Android 自定义view中可以改变activity的数据吗?或者说传值给Activity 自定义view中可以改变activity的数据吗?或者说传值给Activity 解决方案 可以的,用回调......在自定义View中定义个接口,Activity实现接口 解决方案二: 方法太多了,回调,扩大变量作用域,广播,数据存储等等,优选前两个. 解决方案三: 自定义view中设置自定义的listener

界面-Android自定义View画笔颜色改变问题(画笔颜色改变了,但是实际上ABCD这些字母的颜色没变)

问题描述 Android自定义View画笔颜色改变问题(画笔颜色改变了,但是实际上ABCD这些字母的颜色没变) package com.eage.tbw.view; import com.eage.tbw.R; import com.eage.tbw.R.color; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import andro

Android自定义View研究--View中的原点坐标和XML中布局自定义View时View触摸原点问题

这里只做个汇总~.~独一无二 文章出处:http://blog.csdn.net/djy1992/article/details/9715047 Android自定义View研究--View中的原点坐标相关问题 我们自定义了View,但是有没想过一个问题,就是View中的(0,0)坐标,也就是原点坐标在哪??我们是不是有时候很困惑,接下来我们就来研究View中的原点坐标相关的问题. 一.new DuView时View的原点 我们通过从View中绘制一条从原点到右下角的线来看看这个View中的原点

Android如何在自定义view中发送消息给主线程

问题描述 Android如何在自定义view中发送消息给主线程 求求各位大神支招,小弟在自己开发一个东西,遇到了一个小问题. ![ 图片说明](http://img.ask.csdn.net/upload/201603/15/1458054689_616589.jpg) 我在自定义view的onDraw里,当条件达到后就开启一个子线程发送消息给主线程,让主线程中的handler接收消息并执行相应的动作,可是在Log的输出下只能输出"子线程,"而没有"handlemessage

求大神解答一下-android 在自定义view 中添加popwindow报错

问题描述 android 在自定义view 中添加popwindow报错 android 在自定义view中添加popuwindow报错 GC_CONCURRENT freed 内存问题. 求大神给解决方案 解决方案 Android的ScrollView中添加自定义View----------------------

Android自定义View实现左右滑动选择出生年份_Android

自定义view的第三篇,模仿的是微博运动界面的个人出生日期设置view,先看看我的效果图: 支持设置初始年份,左右滑动选择出生年份,对应的TextView的值也会改变.这个动画效果弄了好久,感觉还是比较生硬,与微博那个还是有点区别.大家有改进的方案,欢迎一起交流. 自定义View四部曲,这里依旧是这个套路,看看怎么实现的. 1.自定义view的属性: 在res/values/ 下建立一个attrs.xml , 在里面定义我们的属性以及声明我们的整个样式. <?xml version="1.