自定义视图的Ondraw无限循环android

2024-06-19

我的自定义视图的 OnDraw 函数被无限调用并且正在循环!可能的原因是什么??

这是我的自定义视图:-

public class Balls extends View{

    private static final String TAG = "BallsView";

    private int mMode = READY;
    public static final int PAUSE = 0;
    public static final int READY = 1;
    public static final int RUNNING = 2;
    public static final int LOSE = 3;

    private final Paint mPaint = new Paint();
    private double mUx = 0.1;
    private double  mUy = 2;
    private double mVy;
    private double mVx;
    private double mSx;
    private double mSy;
    private double mRange;
    private float mX1;
    private float mY1;
    private int mX2;
    private int mY2;
    private int mDx;
    private int mDy;
    Time t;
    float mAngle;
    private final double mGravity = -9.8;

    private long mLastTime;

    private double mT;

    private Canvas mCanvas = null;



    public Balls(Context context, AttributeSet attrs, int defStyle){
        super(context, attrs, defStyle);
        setFocusable(true);
        setWillNotDraw(false);
        mPaint.setStyle(Paint.Style.FILL_AND_STROKE); 
        mPaint.setStrokeWidth(10); 
        mPaint.setAntiAlias(true); 
        mPaint.setStrokeCap(Cap.ROUND); 
        //mPaint.setColor(0xff00ffff);
        mPaint.setARGB(255, 0, 255, 0);

        mLastTime = System.currentTimeMillis();


    }
    public Balls(Context context, AttributeSet attrs) {
        super(context, attrs);
         setFocusable(true);
         setWillNotDraw(false);
          mPaint.setStyle(Paint.Style.FILL_AND_STROKE); 
          mPaint.setStrokeWidth(10); 
          mPaint.setAntiAlias(true); 
          mPaint.setStrokeCap(Cap.ROUND); 
          mPaint.setColor(0xff00ffff);

    }

     @Override
    public void onDraw(Canvas canvas) {
         Log.w(this.getClass().getName(),"onDraw of Balls called");
      super.onDraw(canvas);
      mCanvas = canvas;

      if(mCanvas!= null)
          Log.w(this.getClass().getName(),"Canvas is not null");

    }

这个观点在另一项活动中被夸大如下:-

mBalls = (Balls) findViewById(R.id.balls);

该视图放置在相对视图内的 xml 文件中,并且相对视图是水平滚动视图的子视图。


onDraw(Canvas)像无限循环一样被频繁调用是不正常的。 一般情况下应该调用1到3次,如果没有后续的话invalidate或布局更改。 无限循环的原因可能是:
1、你打来电话invalidate or postInvalidate一些地方。
2、父级或同级布局一直在变化。
3、使用View.LAYER_TYPE_SOFTWARE,es。 setLayerType(View.LAYER_TYPE_SOFTWARE,空)。
值得注意的是 LAYER_TYPE_SOFTWARE 会导致onDraw()被调用,就像在循环中一样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义视图的Ondraw无限循环android 的相关文章

  • 获取按下按钮的压力

    android 中有没有一种简单的方法来获取用户在 onClick 事件期间施加的压力 如果您向按钮添加 MotionEvent 侦听器 您可以向 MotionEvent 请求压力 相关文档 http developer android c
  • 如何在Eclipse调试器中查看崩溃原因

    按照这个 Android 教程 http developer android com resources tutorials hello world html http developer android com resources tut
  • Android 和 Java Uuid

    我想为我的应用程序生成一个uuid 我尝试了很多东西 例如wifi mac地址 获取android id 序列号 从设备创建伪uuidandroid os Build特性 我还知道java本身有Uuid创建者类java util UUID
  • 毕加索不在磁盘上缓存图像

    我必须使用自定义 OkHttpClient 以便我可以向图像请求添加标头 问题是毕加索不会因此而在磁盘上缓存任何图像 我用过setIndicatorsEnabled true 检查缓存 我只看到红色指示器 当我使用默认的 OkHttpDow
  • Android 中 Facebook 和 Google+ 登录的 onActivityResult 代码

    Android 中登录的 Facebook API 代码很简单 方法如下活动结果 is protected void onActivityResult int requestCode int resultCode Intent data s
  • 用于编辑文本的电子邮件键盘

    以下代码似乎不起作用 我想要电子邮件键盘 and com显示编辑文本 emailEditText setInputType InputType TYPE TEXT VARIATION EMAIL ADDRESS 将其添加到您的布局中 and
  • Android 在 Nexus 设备上隐藏软键

    我想在用户启动我的应用程序时隐藏软键栏 主页 后退 菜单 我尝试使用 getWindow getDecorView setSystemUiVisibility View SYSTEM UI FLAG HIDE NAVIGATION 但不幸的
  • 是否可以在没有 SDK 的情况下编写 Android 应用程序?

    只是想知道 由于 Android 应用程序是 Java 程序 是否有可能在不使用 SDK 的情况下完全从头开始编写一个应用程序 如果不是 那为什么不呢 不 Android 应用程序是用 Java 编写的 但仅包含标准 Java API 的一
  • 我将 Android 从 targetSdk 22 升级到 23,但遇到了 NoSuchMethodError。我该如何解决这个问题?

    这是我的配置和异常 我不知道如何解决这个问题 compileSdkVersion 23 buildToolsVersion 23 0 1 defaultConfig applicationId com rithmio coach minSd
  • W/Firestore:[CustomClassMapper]:Android 类没有设置器/字段

    我试图使用 Recyclerview 从 Documents 类加载数据 但 logcat 上出现错误 W Firestore 21 1 1 CustomClassMapper No setter field for Document Na
  • Nativescript 中本机传感器的可访问性

    我决定选择在 Nativescript 跨平台 IOS Android 中实现应用程序 或者相应地使用 java swift 制作 真正的 本机应用程序 放弃明显的 1 代码库与 2 代码库讨论 我不确定 Nativescript 的局限性
  • Android Edittext Onclick Datepickerdialog 棒棒糖中出现错误

    我正在使用日期选择器对话框 它在 kitkat 上运行正常 但是当我在棒棒糖上运行应用程序时 当我单击编辑文本时 它会打开一个日期选择器对话框 但当我选择日期时 它会不幸地给出停止错误 以下是 edittext 上日期选择器的代码 priv
  • 发布 apk 中的“来源不明”

    我的调试 APK 中的所有内容都运行良好 但是 当我导出 APK 并安装它时 一切正常 直到我调用引用的库 E AndroidRuntime 32571 at com znood znoodapp ShowResultsActivity a
  • Android Path addArc 在canvas中两点之间

    我正在尝试在 android 中绘制弧线 在IOS中 用这个方法确实很简单 path addArcWithCenter radius startAngle endAngle clockwise 在android中 我有3个点 我的圆的中心
  • 如何暂时禁用Android按钮[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我想暂时禁
  • 将阿拉伯语从 android 发送到 PHP 文件

    尝试使用下面的代码将阿拉伯文本从 android 发送到 PHP 文件 Button setOnClickListener new OnClickListener public void onClick View v TODO Auto g
  • admob 连接被拒绝

    我刚刚开始将 admob 添加到我的 Android 应用程序中 并开始使用 admob 网站上提供的横幅必需品示例 这是示例代码 public class BannerEssentials extends Activity Overrid
  • 如何获取viewPager选中的Tab?

    我使用 lib viewpagerindicator 创建了一个 viewpager 该活动扩展了 FragmentActivity 因此我在获取选择哪个选项卡时遇到问题 我的适配器由下面的代码给出 class GoogleMusicAda
  • PopupWindow 在 Android API 28 的自定义键盘上被剪切

    我做了一个定制键盘 当您长按某个键时 会出现PopupWindow在按键上方显示一些额外的选项 问题在于 在 API 28 中 此弹出窗口被剪切 甚至顶行完全隐藏 我已经为 API with https stackoverflow com
  • 如何在 Android 中没有视频视图的情况下从 URL 获取视频长度(以毫秒为单位)?

    我正在 Android 中制作一个媒体播放器 我需要一个代码来获取视频长度而不使用视频视图 我在堆栈溢出中看到了很多页面 但每个页面都用于显示如何在视频视图中获取视频的长度 但我需要没有视频视图 你可以使用媒体元数据检索器 http dev

随机推荐