Java 我可以从外部库重写方法吗?
我对adnroid有点陌生,所以我想征求一下建议 我正在尝试制作两个可缩放的图像视图。出于这个原因,我实现了这个库,它使imageView完全可缩放,双击缩放等等 我想提出的关键思想是从一幅图像复制手势,并将这些手势应用于另一幅图像(例如,如果第一幅图像正在缩放,我希望另一幅图像的缩放完全相同)。这样做的逻辑方法是为photoView(库中的imageView)编写一个setOnTouchListener,并在onTouch方法中为其调用其他image view和dispachTouchEvent。但是编写setOnTouchListener请求重写onTouch方法,这使得photoView的功能无法工作 所以我的问题是,我甚至可以重写库方法吗?或者如果我可以,也许这就是缺点,我失去了它的所有功能?如果我不能做到这一点,你们还有什么其他的建议如何将手势从一个图像视图复制到另一个图像视图?或者它可以与其他可缩放的图像库一起使用?使用外部库的主要目的不是重新创建整个可缩放的imageView 提前谢谢Java 我可以从外部库重写方法吗?,java,android,Java,Android,我对adnroid有点陌生,所以我想征求一下建议 我正在尝试制作两个可缩放的图像视图。出于这个原因,我实现了这个库,它使imageView完全可缩放,双击缩放等等 我想提出的关键思想是从一幅图像复制手势,并将这些手势应用于另一幅图像(例如,如果第一幅图像正在缩放,我希望另一幅图像的缩放完全相同)。这样做的逻辑方法是为photoView(库中的imageView)编写一个setOnTouchListener,并在onTouch方法中为其调用其他image view和dispachTouchEven
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;
}
});
不能直接在外部库中重写这些方法 但是,如果要覆盖方法的类不是
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的实现 根据Java类加载器的工作方式,还有另一个选项可以实现您想要的功能。但在此之前,您需要检查要更改的库的许可证(如果有)。如果您有一个类的源代码,那么您可以在项目中创建一个与要更改的类具有完全相同的完整类名的类。然后在项目中的该类中编写代码。当您启动应用程序时,Java类加载器将使用您的代码从项目中加载类,而不是从库中加载类。即使库中的类是final或要重写的方法是final,这种方法也可以工作