您好,欢迎访问全国教育考试教材网
商品分类

安卓应用开发实例

我们在实际开发中需要按下按钮,但是像平时使用OnClickListener监听的话,其实不能满足我们的需求。 例如,按下按钮创建秒表app,按下开始计时器,然后释放停止计时器。

如果使用上面的OnClickListener侦听器进行侦听,则只能侦听键上升时的行为。 那么,分开拦截按键抬起的动作会怎么样呢? 这是作者独自实现的方法之一。 请作为参考。

Java Code

textView=(TextView) findViewById(R.id.textView1);

button=(Button) findViewById(R.id.button1);

ButtonListener b=new ButtonListener();

button.setOnClickListener(b);

button.setOnTouchListener(b);

handler=new Handler()

{

@Override

public void handleMessage(Message msg)

{

//TODO Auto-generated method stub

super.handleMessage(msg);

if(msg.what==0x1234)

{

textView.setText ( )计时( msg.obj )秒);

}

}

};

在此,从写有两个侦听器的方法开始,使用内部类进行比较。 一个是上面的OnClickListener,另一个是实现监听按下上升这两个动作的OnTouchListener。 内部类的代码如下。

Java Code

class ButtonListener implements OnClickListener, OnTouchListener

{

public void onClick(View v)

{

if(v.getId()==R.id.button1)

{

Log.d(‘test’, ‘cansal button — click’);

Toast tst=Toast.makeText(MainActivity.this, ‘33333333’,

Toast.LENGTH_SHORT);

tst.show();

}

}

public boolean onTouch(View v, MotionEvent event)

{

if(v.getId()==R.id.button1)

{

if ( event.get action (==motion event.action _ down ) /判定动作,如果是按下则设置标志位,接通线程

{

state=true;

new MyThread().start();

}

if ( event.get action (==motion event.action _ up ) /抬起时重置标志位,结束线程

{

state=false;

}

}

return false;

}

}

在这里,为了实现按下开始计时、上升停止计时的功能,计时功能需要在一个线程中实现。 这里使用handler-message通过以下方法实现。

Java Code

class MyThread extends Thread

{

@Override

public void run()

{

//TODO Auto-generated method stub

super.run();

while(state)

{

try

{

Thread.sleep(1000);

}

catch (InterruptedException e)

{

//TODO Auto-generated catch block

e.printStackTrace();

}

Message message=new Message();

message.what=0x1234;

message.obj=count++;

handler.sendMessage(message);

//handler.sendEmptyMessage(0x1234);

}

}

}

每秒向线程添加一次count,将count数字传递给handler,更新textview内容,方法稳定可行,系统资源消耗少,用于其他项目具有很好的效果。

実行結果:

押下時

抬起时