我对类人动物很新鲜,所以寻求建议。
我正在尝试制作2个可缩放的imageViews。因此,我实现了https://github.com/chrisbanes/PhotoView库,该库使imageView完全可缩放,双击缩放等。
我要做出的关键思想是从一个图像复制手势,然后将这些手势应用于另一个图像(例如,如果第一个图像正在缩放,我希望另一个图像完全一样缩放)。这样做的逻辑方法是为photoView(来自库的imageView)编写setOnTouchListener,并在onTouch方法中调用其他图像视图并为其分配dispachTouchEvent。但是编写setOnTouchListener要求重写onTouch方法,这会使photoView的功能失效。
所以我的问题是,我什至可以覆盖库mathods吗?或者,如果可以的话,那可能是我的缺点,那就是我失去了所有功能吗?如果我不能这样做,你们还有其他建议如何将手势从一个imageView复制到另一个?还是可以与其他可缩放图像库一起使用?使用外部库的主要目的不是重新发明整个可缩放的imageView。
谢谢!
PhotoView image = findViewById(R.id.photo);
PhotoView image2 = findViewById(R.id.photo2);
image.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
image2.dispatchTouchEvent(motionEvent);
return false;
}
});
答案 0 :(得分:3)
您不能直接在外部库中重写方法。
但是,如果您要覆盖的方法的类不是 final
,而您要覆盖的方法的不是 final
,那么您可以创建该类的子类。
例如,如果PhotoView
不是标有final
的课程,我可以创建以下内容:
public class CustomPhotoView extends PhotoView {
@Override
public void setOnTouchListener(OnTouchListener l) {
super.setOnTouchListener(l);
//Do stuff
}
}
从本质上讲,这与通过将其他ImageView
的其他子视图创建子类来创建自己的自定义视图时相同。
但是,您还可以创建PhotoView
的分支或副本,并直接对PhotoView
进行更改。之后,您将使用自己的PhotoView
实现而不是Chris Banes的实现。
答案 1 :(得分:0)
由于Java类加载器的工作方式,还有另一个选择可以实现您想要的。但是在此之前,您需要检查要更改的库的许可证(如果有)。如果您具有类的源代码,则可以在项目中创建与要更改的类完全相同的完整类名的类。然后在您的项目的该类中编写代码。而且,当您启动应用程序时,Java类加载器将使用代码而不是库中的类从项目中加载类。即使库中的类是最终的,或者您要覆盖的方法是最终的,这种方法也可以使用。