android - Invalidating 1 Custom View Causes All Custom Views In A View Group To Be Invalidated? -
i have custom view group. in custom view group number of custom views. custom views overlap each other in layout.
the overlapping views intential create "layers". 1 layer may create static content, layered view creates different animated content. problem comes when call .postinvalidate thread on 1 view animation runs @ 60fps. outside of layered views 60fps achievable device i'm using (galaxy s3).
inside custom view group, .invalidate causes 1 out of 2 hardware rendered views invalidate, , of software views invalidate it.
mycustomviewthatshouldnotinvalidate(abstractdiallayer).ondraw(canvas) line: 68 mycustomviewthatshouldnotinvalidate.ondraw(canvas) line: 79 mycustomviewthatshouldnotinvalidate(view).draw(canvas) line: 13650 mycustomviewthatshouldnotinvalidate(view).draw(canvas, viewgroup, long) line: 13534 mycustomviewgroup(viewgroup).drawchild(canvas, view, long) line: 2938 mycustomviewgroup(viewgroup).dispatchdraw(canvas) line: 2808 mycustomviewgroup(view).builddrawingcache(boolean) line: 12909 mycustomviewgroup(view).getdisplaylist(displaylist, boolean) line: 12580 mycustomviewgroup(view).getdisplaylist() line: 12645 relativelayout(viewgroup).dispatchgetdisplaylist() line: 2920 relativelayout(view).getdisplaylist(displaylist, boolean) line: 12537 relativelayout(view).getdisplaylist() line: 12645 relativelayout(viewgroup).dispatchgetdisplaylist() line: 2920 relativelayout(view).getdisplaylist(displaylist, boolean) line: 12537 relativelayout(view).getdisplaylist() line: 12645 nosavestateframelayout(viewgroup).dispatchgetdisplaylist() line: 2920 nosavestateframelayout(view).getdisplaylist(displaylist, boolean) line: 12537 nosavestateframelayout(view).getdisplaylist() line: 12645 viewpager(viewgroup).dispatchgetdisplaylist() line: 2920 viewpager(view).getdisplaylist(displaylist, boolean) line: 12537 viewpager(view).getdisplaylist() line: 12645 linearlayout(viewgroup).dispatchgetdisplaylist() line: 2920 linearlayout(view).getdisplaylist(displaylist, boolean) line: 12537 linearlayout(view).getdisplaylist() line: 12645 relativelayout(viewgroup).dispatchgetdisplaylist() line: 2920 relativelayout(view).getdisplaylist(displaylist, boolean) line: 12537 relativelayout(view).getdisplaylist() line: 12645 nosavestateframelayout(viewgroup).dispatchgetdisplaylist() line: 2920 nosavestateframelayout(view).getdisplaylist(displaylist, boolean) line: 12537 nosavestateframelayout(view).getdisplaylist() line: 12645 linearlayout(viewgroup).dispatchgetdisplaylist() line: 2920 linearlayout(view).getdisplaylist(displaylist, boolean) line: 12537 linearlayout(view).getdisplaylist() line: 12645 longpressgesturedetectingframelayout(viewgroup).dispatchgetdisplaylist() line: 2920 longpressgesturedetectingframelayout(view).getdisplaylist(displaylist, boolean) line: 12537 longpressgesturedetectingframelayout(view).getdisplaylist() line: 12645 framelayout(viewgroup).dispatchgetdisplaylist() line: 2920 framelayout(view).getdisplaylist(displaylist, boolean) line: 12537 framelayout(view).getdisplaylist() line: 12645 linearlayout(viewgroup).dispatchgetdisplaylist() line: 2920 linearlayout(view).getdisplaylist(displaylist, boolean) line: 12537 linearlayout(view).getdisplaylist() line: 12645 customviewabove(viewgroup).dispatchgetdisplaylist() line: 2920 customviewabove(view).getdisplaylist(displaylist, boolean) line: 12537 customviewabove(view).getdisplaylist() line: 12645 slidingmenu(viewgroup).dispatchgetdisplaylist() line: 2920 slidingmenu(view).getdisplaylist(displaylist, boolean) line: 12537 slidingmenu(view).getdisplaylist() line: 12645 phonewindow$decorview(viewgroup).dispatchgetdisplaylist() line: 2920 phonewindow$decorview(view).getdisplaylist(displaylist, boolean) line: 12537 phonewindow$decorview(view).getdisplaylist() line: 12645 hardwarerenderer$gl20renderer(hardwarerenderer$glrenderer).draw(view, view$attachinfo, hardwarerenderer$hardwaredrawcallbacks, rect) line: 1170 viewrootimpl.draw(boolean) line: 2275 viewrootimpl.performdraw() line: 2147 viewrootimpl.performtraversals() line: 1958 viewrootimpl.dotraversal() line: 1112 viewrootimpl$traversalrunnable.run() line: 4474 choreographer$callbackrecord.run(long) line: 725 choreographer.docallbacks(int, long) line: 555 choreographer.doframe(long, int) line: 525 choreographer$framedisplayeventreceiver.run() line: 711 handler.handlecallback(message) line: 615 choreographer$framehandler(handler).dispatchmessage(message) line: 92 looper.loop() line: 137 activitythread.main(string[]) line: 4918 method.invokenative(object, object[], class, class[], class, int, boolean) line: not available [native method] method.invoke(object, object...) line: 511 zygoteinit$methodandargscaller.run() line: 1004 zygoteinit.main(string[]) line: 771 nativestart.main(string[]) line: not available [native method]
invalidate on view chain invalidate calls parents in view hierarchy. if hardware accelerated, may invalidate depending on flag in hardwarerenderer class. optimization. can check invalidate implementation. here link relevant call - invalidate() -check hardware acceleration
to sure, can check value of hardwarerenderer.render_dirty_regions on device in application.
Comments
Post a Comment