1

我有以下代码可以扩展磁贴。但是,我有不止一个这些图块,我需要代码对它们中的每个人都是通用的。

启动时的用户界面:http: //s14.postimage.org/9wn8b2my9/Screenshot_2012_09_14_12_03_14.png

我有两个选择:

第一个是使用原始的 X、Y 值,这意味着我的手指在屏幕上的确切位置。这样我可以很容易地计算出几个点的准确宽度、高度和距离。一个问题是该值不适用于所有图块。例如,左上角的图块不会展开,而左下角的图块将扩大到超出应有的水平。唯一真正似乎在听的瓷砖是中间的瓷砖。

else if(event.getAction() == MotionEvent.ACTION_MOVE) {         
        if((newPos.x > this.leftParent.getX()) && (newPos.x < this.rightParent.getX())){
            //reposition the touch indicator
            this.child.setX(newPos.x-42); //-42 because pic = 84dp
            this.child.setVisibility(VISIBLE);
        }
        if((newPos.y < this.bottomParent.getY()) && (newPos.y > this.topParent.getY())){
            this.child.setY(newPos.y-42);
            this.child.setVisibility(VISIBLE);
        }

        if((this.rightParent.getX() - newPos.x) < this.originalSize.x){
            // X too narrow
            this.leftParent.setX((float) (this.rightParent.getX()-this.originalSize.x));
            Log.e("loc", "X TOO NARROW");
        } else if((this.rightParent.getX() - newPos.x) > this.rightParent.getX()-this.originalSize.x*1.6){
            // X too wide
            Log.e("loc", "X TOO WIDE newPos: "+newPos.x+", "+newPos.y+" new width:"+(this.rightParent.getX() - newPos.x)+ " old width:"+(this.rightParent.getX()-this.originalSize.x*1.6));
        } else if(((this.rightParent.getX() - newPos.x) > this.originalSize.x) && ((this.rightParent.getX() - newPos.x) < this.rightParent.getX()-this.originalSize.x*1.6)){ 
            // X inbetween required values
            elasticPosition.x = (int) Math.pow(Math.E, -newPos.x);
            this.leftParent.setX(newPos.x);
            Log.e("loc", "X OK");
        }

        if((this.bottomParent.getY() - newPos.y) < this.originalSize.y){
            // Y too narrow
            this.topParent.setY(this.bottomParent.getY()-this.originalSize.y);
            Log.e("loc", "Y TOO NARROW");
        } else if((this.bottomParent.getY() - newPos.y) > this.bottomParent.getY()-this.originalSize.y*1.6){
            // Y too wide
            Log.e("loc", "Y TOO WIDE");
        } else if(((this.bottomParent.getY() - newPos.y) > this.originalSize.y) && ((this.bottomParent.getY() - newPos.y) < this.bottomParent.getY()-this.originalSize.y*1.6)){
            // Y inbetween required values
            //elasticPosition.y = (int) Math.pow(Math.E, -newPos.y);        //shaving this for a rainy day
            this.topParent.setY(newPos.y);

            Log.e("loc", "Y OK");
        }

瓷砖拒绝拉伸:http ://s12.postimage.org/ltunmbt7x/Screenshot_2012_09_14_12_03_31.png (记录瓷砖已经超出了它的最大边界)

第二个是使用 X、Y 值与父对象的位置进行比较。这个产生更简单的公式,目前持有我的偏好。但是,由于图块恰好扩展,因此值也会扩展。在图块的左上角,值是 (0,0),如果我越过那个角,值将下降到负值。但是,如果我再次收缩瓷砖,我会突然得到一个正值,它会让一切变得摇摇欲坠、有问题、有故障等等。

if(event.getX() > 0 && event.getX() < this.getX() + this.getAccurateSize().x){
            //inbetween original values
            this.leftParent.setX((float) (this.rightParent.getX()-this.originalSize.x));
            Log.e("touch x", "inbetween original values");
        } else if(event.getX() < (0 - originalSize.x*0.6)){
            //too wide
            this.leftParent.setX((float) (this.rightParent.getX()-this.originalSize.x*1.6));
            Log.e("touch x", "too wide");
        } else if(event.getX() < 0 && event.getX() > (0 - originalSize.x*0.6)){
            //inbetween stretched values
            this.leftParent.setX(newPos.x);
            Log.e("touch x", "inbetween stretched values");
        }

        if(event.getY() > 0 && event.getY() < this.getY() + this.getAccurateSize().y){
            //inbetween original values
            this.topParent.setY(this.bottomParent.getY()-this.originalSize.y);
            Log.e("touch y", "inbetween original values");
        } else if(event.getY() < (0 - originalSize.y*0.6)){
            //too wide
            this.topParent.setY((float) (this.bottomParent.getY()-(this.originalSize.y*1.6)));
            Log.e("touch y", "too wide");
        } else if(event.getY() < 0 && event.getY() > (0 - originalSize.y*0.6)){
            //inbetween stretched values
            this.topParent.setY(newPos.y);
            Log.e("touch y", "inbetween stretched values");
        }

如果有人能帮我修复这个烦人的错误,我会非常高兴,这样我就可以继续开发这个应用程序。提前致谢!

4

0 回答 0