
在这里,我更新了我的世界以包括画布大小
world.getVIEwPort().updateVIEwPortSize(wIDth,height);有一个更好的方法吗?有没有一种方法可以自动更新我的世界对象,而不必在setSurfaceSize方法中手动调用它,而是从我的世界类中调用它?
我的猜测是我可以使用某种回调,但是我不理解它们!
/* Callback invoked when the surface dimensions change. */public voID setSurfaceSize(int wIDth, int height) { // synchronized to make sure these all change atomically synchronized (mSurfaceHolder) { mCanvasWIDth = wIDth; mCanvasHeight = height; world.getVIEwPort().updateVIEwPortSize(wIDth,height); }}解决方法:
回调函数在Java中非常简单.做到这一点的方法是简单地定义一个具有单个方法m()的接口A,然后向您的World类添加类型A的集合.然后,在World对象的某个点上,您要遍历A集合并在每个元素上调用方法m().要向您的World添加“回调函数”,您只需定义一些实现您的接口A的类,并将其放入World类中的A对象的集合中.例如,
public interface CallbackFunction{ public voID execute(int a, int b);}public class World{ List<CallbackFunction> callbackFunctions; public voID addCallback(CallbackFunction f) { callbackFunctions.add(f); } private voID updateWorld() { // This loop Could be anywhere in your World class for(CallbackFunction f : callbackFunctions) { f.execute(<some int>, <some int>); } }}然后向您的世界添加功能:
world.addCallback(new CallbackFunction(){ public voID execute(int a, int b) { // Do some stuff }}我将剩下的工作留给您,但这应该使您对如何在Java中通常实现回调有一个很好的了解.
您也不需要存储通用的回调函数集合,您可以在World类中将特定的回调函数与特定的方法结合在一起.例如,您的World类可能具有一些通过比较集合中的两个元素对事物进行排序的方法.要确定一个对象应该在另一个对象之前还是之后,您可以定义一个CallbackFunction接口,该接口具有一个接受2件事(例如int的)的方法,并返回一个值,该值指示应优先进行的事情.例如,
public interface CallbackForSorting{ public int compare(int a, int b);}public class World{ List<Integer> thingsToSort; public voID sortThings(CallbackForSorter sorter) { int result = sorter.compare(thingsToSort.get(i), thingsToSort.get(i+1)); if(result == 0) // elements are equal if(result == -1) // thingsToSort.get(i) is "less than" thingsToSort.get(i+1) if(result == 1) // thingsToSort.get(i) is "greater than" thingsToSort.get(i+1) }} 总结 以上是内存溢出为你收集整理的android-如何在我自己的代码中使用回调全部内容,希望文章能够帮你解决android-如何在我自己的代码中使用回调所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)