我需要在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
并覆盖方法。
但有没有更好的解决方案来避免这种代码冗余?
答案 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;
}
}