现有的类在具有意图的新项目中不起作用

时间:2012-09-06 15:20:24

标签: android android-intent ontouchevent

我写了一个带有1个活动和1个视图的应用程序,所以它给了我放在屏幕上的手指坐标。工作得很好。

现在的问题是:我创建了一个具有多个活动的新应用程序,因此我可以使用意图在它们之间进行更改。也工作得很好。但是一个活动应该是给我我的手指位置的活动。所以我复制了类和活动,将它们放入清单中。并制作了一个按钮,并打算运行它。 因此,当我尝试运行它时,它会创建类,但不再对我的onTouchEvents做出反应...... 我不知道为什么。我希望我能很好地解释我的问题,让你们明白。

所以这是我的主要活动。启动菜单,选择转到非工作类

public class V1_2 extends Activity implements OnClickListener{
    Button btn_1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_v1_2);

        btn_1 = (Button) findViewById(R.id.button1);
        btn_1.setOnClickListener(this);

    }

    public void onClick(View v) {
        if( btn_1.getId() == ((Button)v).getId() ){
            startActivity(new Intent(this,Obj_recog.class));
        }
    }

现在这是为touchevents创建touchpiont类的活动

public class Obj_recog extends Activity implements OnClickListener{
    touchtest TP;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.blank);
        TP = new touchtest(this);
    }

    public void onClick(View v) {

    }

现在这里有一个不起作用的例子,但是在上一个项目中以同样的方式工作

public class touchtest extends View{

    public touchtest(Context context) {
        super(context);
        Log.d("worked", "worked");

    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        Log.d("Touch", "TOUCH!!!!");
        return true;
    }

}

所以我得到的消息是它“有效”,但它并没有像过去那样对触摸事件作出反应......

1 个答案:

答案 0 :(得分:0)

如果您使用setcontentview然后添加touchtest视图作为主视图,它将会起作用 在该视图上添加touchlistener并从您的touchtest类中调用您的ontouchevent。代码就像 -

 TP = new touchtest(this);
    setContentView(TP);
    TP.setOnTouchListener(new View.OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub

                            TP.onTouchEvent(event);

            return false;
        }
    });

我认为应该改变这种方法,找到一种替代方法,以这种方式实现。

通过这种方式,您可以保留空白布局以及TP。

RelativeLayout rl = (RelativeLayout) findViewById(R.id.rl);
TP = new touchtest(this);
    rl.addView(TP);

    TP.setOnTouchListener(new View.OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub

                            TP.onTouchEvent(event);

            return false;
        }
    });