我可以覆盖从外部库的方法呢?

问题描述 投票:1回答:2

我在Android的那种新鲜的,所以要求的建议。

我试图让2个imageViews,这可能是缩放。出于这个原因,我实现https://github.com/chrisbanes/PhotoView库,这使得完全ImageView的可缩放,双击缩放等。

我想要的核心思想,是从一个图像复制的手势,并将这些手势到另一个(例如,如果第一图像被放大beeing,我想另外一个被精确地放大相同)。做到这一点的逻辑方式写PhotoView中(从库ImageView的),并在onTouch方法调用其他图像视图和dispachTouchEvent为它的setOnTouchListener。但写setOnTouchListener requeres覆盖onTouch方法,然后让PhotoView中的funcionaluty不起作用。

所以我的问题是,我甚至可以忽略库注资方式?或者,如果我能做到,也许这就是缺点,那我失去所有它的功能?如果我不能做到这一点,做你们有其他建议如何从一个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;
        }
    });
java android
2个回答
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的,而不是从克里斯巴内斯之一。


0
投票

还有另一种选择达到你想要由于Java类加载器的工作原理是什么。但在此之前,你需要检查许可证(如果有的话)要更改库。如果你有一个类的源代码,那么你就可以在完全一样的全类名,只要你想改变类项目中创建一个类。然后编写代码在你的项目类。当你启动应用程序的Java类加载器会从您的项目加载类的代码,而不是从库中的一类。这种方法将工作,即使从库类是最终或要覆盖的方法是最终决定。

© www.soinside.com 2019 - 2024. All rights reserved.