1

タイルを展開できるようにする次のコードがあります。しかし、私はこれらのタイルを複数持っており、コードがそれらのすべてに共通である必要があります。

起動時の UI: http://s14.postimage.org/9wn8b2my9/Screenshot_2012_09_14_12_03_14.png

使用するオプションは 2 つあります。

1 つ目は、生の X、Y 値を使用することです。これは、画面上の指の正確な位置を意味します。このようにして、正確な幅、高さ、およびいくつかのポイントまでの距離を簡単に計算できます。1 つの問題は、この値がすべてのタイルで機能しないことです。たとえば、左上のタイルは拡張されず、左下のタイルは必要以上に拡張されます。実際にリッスンしているように見える唯一のタイルは、真ん中のタイルです。

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 (タイルが既に最大境界を超えていることをログに記録)

2 番目は、親オブジェクトの位置と比較して 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