将自定义的ScrollView强制转换为ScrollView

huangapple go评论93阅读模式
英文:

Casting custom ScrollView to ScrollView

问题

我有一个自定义的滚动视图,看起来像这样:

  1. public class PagerScrollView extends ScrollView {
  2. float touchX = 0;
  3. float touchY = 0;
  4. ViewPager parentPager;
  5. public void setParentPager(ViewPager parentPager) {
  6. this.parentPager = parentPager;
  7. }
  8. public PagerScrollView(Context context, AttributeSet attrs) {
  9. super(context, attrs);
  10. }
  11. public PagerScrollView(Context context) {
  12. super(context);
  13. }
  14. @Override
  15. public boolean onTouchEvent(MotionEvent ev) {
  16. switch (ev.getActionMasked()) {
  17. case MotionEvent.ACTION_DOWN:
  18. touchX = ev.getX();
  19. touchY = ev.getY();
  20. return super.onTouchEvent(ev);
  21. case MotionEvent.ACTION_MOVE:
  22. if (Math.abs(touchX - ev.getX()) < 40) {
  23. return super.onTouchEvent(ev);
  24. } else {
  25. if (parentPager == null) {
  26. return false;
  27. } else {
  28. return parentPager.onTouchEvent(ev);
  29. }
  30. }
  31. case MotionEvent.ACTION_CANCEL:
  32. case MotionEvent.ACTION_UP:
  33. touchX = 0;
  34. touchY = 0;
  35. break;
  36. }
  37. return super.onTouchEvent(ev);
  38. }
  39. }

在 XML 中,我将它包裹在一个 ViewPager 和一个 TabLayout 中(也许这是错误的原因?)。当我尝试使用以下代码进行分配时:

  1. PagerScrollView pagerScrollView = rootView.findViewById(R.id.pager_scroll_view);

我得到以下错误:

  1. android.widget.ScrollView cannot be cast to exampleapplication.PagerScrollView

如何正确地进行类型转换?

英文:

I have got a custom scrollview that looks like this:

  1. public class PagerScrollView extends ScrollView {
  2. float touchX = 0;
  3. float touchY = 0;
  4. ViewPager parentPager;
  5. public void setParentPager(ViewPager parentPager) {
  6. this.parentPager = parentPager;
  7. }
  8. public PagerScrollView(Context context, AttributeSet attrs) {
  9. super(context, attrs);
  10. }
  11. public PagerScrollView(Context context) {
  12. super(context);
  13. }
  14. @Override
  15. public boolean onTouchEvent(MotionEvent ev) {
  16. switch (ev.getActionMasked()) {
  17. case MotionEvent.ACTION_DOWN:
  18. touchX = ev.getX();
  19. touchY = ev.getY();
  20. return super.onTouchEvent(ev);
  21. case MotionEvent.ACTION_MOVE:
  22. if (Math.abs(touchX-ev.getX()) &lt; 40) {
  23. return super.onTouchEvent(ev);
  24. } else {
  25. if (parentPager == null) {
  26. return false;
  27. } else {
  28. return parentPager.onTouchEvent(ev);
  29. }
  30. }
  31. case MotionEvent.ACTION_CANCEL:
  32. case MotionEvent.ACTION_UP:
  33. touchX = 0;
  34. touchY = 0;
  35. break;
  36. }
  37. return super.onTouchEvent(ev);
  38. }
  39. }

In the xml, I wrap it around a ViewPager and a TabLayout (maybe this is the error?). When I try to assign it using

  1. PagerScrollView pagerScrollView = rootView.findViewById(R.id.pager_scroll_view);

I get:

  1. android.widget.ScrollView cannot be cast to exampleapplication.PagerScrollView

How can I cast it correctly?

答案1

得分: 0

问题在于我在XML中使用了普通的ScrollView,而不是我的<exampleapplication.CustomScrollView>。替换后,问题得以解决。

英文:

The issue was that I used a normal ScrollView in the xml instead of my <exampleapplication.CustomScrollView>. Replacing that fixed my problem.

huangapple
  • 本文由 发表于 2020年9月14日 17:47:30
  • 转载请务必保留本文链接:https://go.coder-hub.com/63881924.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定