Android 实现我自己的Ontouch侦听器
我想创建我自己的OnTouchListener。然后我想将其封装到一个.jar文件中,以使其可重用 这是我的特定听众:Android 实现我自己的Ontouch侦听器,android,ontouchlistener,Android,Ontouchlistener,我想创建我自己的OnTouchListener。然后我想将其封装到一个.jar文件中,以使其可重用 这是我的特定听众: public class TouchableView extends View implements OnTouchListener{ myTouch t=null; public TouchableView(Context context) { super(context); // Set KeyListener to ou
public class TouchableView extends View implements OnTouchListener{
myTouch t=null;
public TouchableView(Context context) {
super(context);
// Set KeyListener to ourself
this.setOnTouchListener(this);
}
public TouchableView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// Set KeyListener to ourself
this.setOnTouchListener(this);
}
public TouchableView(Context context, AttributeSet attrs) {
super(context, attrs);
// Set KeyListener to ourself
this.setOnTouchListener(this);
}
public void setmyTouch(myTouch listener) {
t = listener;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
t.downTouch();
return true;
}
return false;
}
public interface myTouch{
public abstract boolean downTouch();
}
}
这就是我试图使用它的方式:
public class MyTouchImplement extends Activity implements myTouch{
/** Called when the activity is first created. */
TextView tv;
int i=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView) findViewById(R.id.tv);
TouchableView view = (TouchableView) findViewById(R.id.view);
view.setmyTouch(this);
}
@Override
public boolean downTouch() {
i++;
tv.setText(i+"");
return true;
}
}
我想让它适用于OnTouchListener使用的每个组件。您已经创建了一个非常复杂的依赖关系网络,您应该简化它。例如,您不应该像这样传递活动对象 另外,在创建活动类时,不需要重新定义构造函数。使用超级构造函数很好。您需要定义的是
onCreate
onStart
onPause
onStop
onstroy
方法。我强烈建议你读这本书
一个比上面更简单的实现是去掉myTouch界面。从TouchableView
类中删除implements OnTouchListener
,并在活动类中创建一个OnTouchListener
类
它看起来像这样:
public class MyTouchActivity extends Activity{
TouchableView tv;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv = new TouchableView();
tv.setOnTouchListener(new MyOwnTouchListener());
}
class MyOnTouchListener implements OnTouchListener{
public boolean onTouchEvent(View v, MotionEvent e){
switch(e.getAction){
case (MotionEvent.TOUCH_DOWN)
MyTouchActivity.this.touchDown();
break;
}
}
}
public boolean touchDown(){
//touch down happened
}
}
您已经创建了一个非常复杂的依赖关系网,您应该简化它。例如,您不应该像这样传递活动对象 另外,在创建活动类时,不需要重新定义构造函数。使用超级构造函数很好。您需要定义的是
onCreate
onStart
onPause
onStop
onstroy
方法。我强烈建议你读这本书
一个比上面更简单的实现是去掉myTouch界面。从TouchableView
类中删除implements OnTouchListener
,并在活动类中创建一个OnTouchListener
类
它看起来像这样:
public class MyTouchActivity extends Activity{
TouchableView tv;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv = new TouchableView();
tv.setOnTouchListener(new MyOwnTouchListener());
}
class MyOnTouchListener implements OnTouchListener{
public boolean onTouchEvent(View v, MotionEvent e){
switch(e.getAction){
case (MotionEvent.TOUCH_DOWN)
MyTouchActivity.this.touchDown();
break;
}
}
}
public boolean touchDown(){
//touch down happened
}
}
以下内容适合我。请检查一下这是否有帮助。请随意修改构造函数以满足您的需要。对于这个测试,我使用了一个带有两个TextView(txtxty)字段和一个GridLayout控件的线性布局 扫雷机器人touch.java
以下内容适合我。请检查一下这是否有帮助。请随意修改构造函数以满足您的需要。对于这个测试,我使用了一个带有两个TextView(txtxty)字段和一个GridLayout控件的线性布局 扫雷机器人touch.java
它不起作用。在触摸视图视图=(触摸视图)findViewById(R.id.view)行;这涉及到将自定义视图放置在布局XML中。请发布该布局,并说明您得到的确切错误。我已经尝试了包含LinearLayout的布局,并在其中添加了一个视图。错误是ClassCastException android.widget.LinearLayoutOh我知道你的意思。因此,如果我想这样做,我需要添加自定义视图。但这正是我想要回避的,因为如果我这样做,我必须一个接一个地实现每个组件。没有办法不扩展组件就可以做到这一点吗?它不起作用。在触摸视图视图=(触摸视图)findViewById(R.id.view)行;这涉及到将自定义视图放置在布局XML中。请发布该布局,并说明您得到的确切错误。我已经尝试了包含LinearLayout的布局,并在其中添加了一个视图。错误是ClassCastException android.widget.LinearLayoutOh我知道你的意思。因此,如果我想这样做,我需要添加自定义视图。但这正是我想要回避的,因为如果我这样做,我必须一个接一个地实现每个组件。在不扩展组件的情况下,有没有办法做到这一点?主要目标是封装一些复杂的触摸模式,以便下次我只需添加.jar文件并覆盖我需要的方法。这样我就无法覆盖着陆方法。这就是为什么我必须用一个抽象的触地方法来制作一个界面。好的,那很好,可以简单地让MyTouchAcvity实现界面myTouch界面,然后你试过了吗?我试过多种方法,但都不管用。如果你能把你的解决方案寄给我,我将不胜感激。提前谢谢。主要目标是封装一些复杂的触摸模式,这样下次我只需添加.jar文件并覆盖我需要的方法。这样我就无法覆盖着陆方法。这就是为什么我必须用一个抽象的触地方法来制作一个界面。好的,那很好,可以简单地让MyTouchAcvity实现界面myTouch界面,然后你试过了吗?我试过多种方法,但都不管用。如果你能把你的解决方案寄给我,我将不胜感激。先谢谢你。