2013-05-28 32 views
6

Androidのアクティビティで画像を動的に作成して移動しようとしています。しかし、setX()とsetY()メソッドは正しく動作しないようです。画像を最初に作成して配置するときに画像の位置を正しく設定しますが、画像を更新しようとすると画像が間違った場所に配置されます。例えば、画像は、次のコードに移動する:ACTION_MOVE上の画像は、x及びy位置の値が同じままであっても移動さAndroidのsetX()とsetY()が異常に動作する

ImageView image; 
RelativeLayout layout = (RelativeLayout)findViewById(R.id.activity_this); 

if(action == MotionEvent.ACTION_DOWN){ 

    image = new ImageView(MyClass.this);        
    layout.addView(image, width, height); 
    image.setX(206); 
    image.setY(206); 
} 
else if(action == MotionEvent.ACTION_MOVE){ 

    if(image != null){ 
     image.setX(206); 
     image.setY(206); 
    } 
} 

。画像の親は同じままです。サイズは変わりません。 xとyの値を取得すると、それはまだ206となりますが、アクティビティの(206,206)には配置されません。なぜこれが起こっているのか分からない。私は、物理的に場所が変わる以外は、画像が変更されたという指示はありません。

答えて

13

本当にこれは起こってはいけません。あるいは、別の変数を設定してxとyを設定するか、xを取得してyを取得し、同じ場所に対してそれぞれの変数に0を追加してみてください。より多くの情報があり

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); //WRAP_CONTENT param can be FILL_PARENT 
params.leftMargin = 206; //XCOORD 
params.topMargin = 206; //YCOORD 
childView.setLayoutParams(params); 

からAndroid - Use of view.setX() and setY in api 8に述べたように、あなたが検索している場合

も、このようにもAPIの前に8 LayoutParams作品を作品別の解決策があります。私はこれが助けてくれることを願っています。

+1

Tyvmです。 paramsを使うことは私のために働く。私はまだsetXとYで何が起こっているのか不思議です。私はすべてを試しましたが、ダウンイベントで既に設定されている値を設定した後は、いつでも値を設定します(新しい値を設定してもイメージは間違った場所に移動されます)。オフに30ピクセル周りの一定値で離れすぎて、私がテストしているエミュレータの左に。私はそれがビューの親や何かを変えなければならないと思ったが、それはそうではない。文字通り私が見つけることのできるものは何も変わりません。 – user2423199

+0

密度がありますか?プログラムで数値を設定するときは、getResources()。getDisplayMetrics().px値をdp値に変更する密度を掛ける必要があります – marmor

1

同じ問題にぶつかります。 View.setLeft(int)/View.setTop(int)私のために働いた

+0

私のためには機能しませんでした。私の視界を垂直に伸ばした – tieorange

+1

@tieorange down vote?私はあなたのために働かなかったすべての答えに対して同じことをするべきだと思います。しかし、一般的には、より多くの異なる答えが出てくる可能性が高いので、他の人の助けを借りて問題を解決する時間を節約できます。類似の問題は実際には異なる解決策を持つことができ、そうでないかもしれない。この場合、掘り起こしてください。だから実際には他の人に役立つので、あなたの特定のケースではうまくいかなかった場合には、投票の回答を失うという実用的な理由はありません。あなたのために働いたものを投票することで、異なる解決策を共有するよう奨励してください。 –

0

あなたのフルスクリーンモードでの活動ですか?それをフルスクリーンにしようとしないと、あなたの問題を解決するはずです。

0

かなり遅く答えますが、他の誰かが同じ問題に直面している場合は、それは、レイアウトファイル内のパディングこれは私のためにそれを修正しました:誰かとして

android:paddingBottom="16dp" 
android:paddingLeft="16dp" 
android:paddingRight="16dp" 
android:paddingTop="16dp" 
0

実際にこの問題に直面し、私はparentViewで任意のパディングを削除することによってこの問題を解決しています。パディングは、レイアウトサイズの変更を引き起こすようです。答えは

関連する問題