扩展android View类并影响所有子类

时间:2014-02-25 12:59:16

标签: java android oop view

我需要在Android中扩展View类以覆盖几种方法。

public class ExtendedView extends View {

    public ExtendedView(Context context) {
        super(context);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_MOVE && getParent() != null) 
            getParent().requestDisallowInterceptTouchEvent(true);
        return super.onTouchEvent(event);
    }

     ...
}

android中有几种视图类型派生自View,如ImageView等。

他们无法访问ExtendedView类中的重写方法。

一种解决方案是为所有这些创建扩展类,例如:

public class ExtendedImageView extends ImageView

并覆盖方法。

但有没有更好的解决方案来避免这种代码冗余?

2 个答案:

答案 0 :(得分:0)

创建一个实现onTouchEventListener的BaseActivity(或类似的东西,不记得了),然后当你有一个需要处理它的视图时,只需setOnTouchListener(this)

当然,让您的活动扩展BaseActivity

此致

答案 1 :(得分:0)

按照我的说法,这是一种简单而体面的方式。 在这里,您的代码是集中的,并且给出了一个通用的实现,所有预期的ExtendedView类都将使用它。

class MyImplementation
{
 public boolean methodA(View v, MotionEvent event)
 {
  boolean someBoolean = false;
  // some impl of your spl method.
  if(v instanceOf ExtendedImageView)
   {
     // ImageView called this method.
   }

 }
 return someBoolean;
}

图像视图实现

public class ExtendedImageView extends ImageView{
    public boolean onTouchEvent (MotionEvent event)
     {
       MyImplementaion a  = new MyImplemenation();
       boolean b = a.methodA(this, event);
       return b;
     }
}

对于其他一些观点

public class ExtendedMapView extends MapView{

       public boolean onTouchEvent (MotionEvent event)
       {
        MyImplementaion a  = new MyImplemenation();
        boolean b = a.methodA(this, event);
        return b;
       }
}