9

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);
    }
}

ACTION_MOVE では、x と y の位置の値が同じままであっても、画像は移動します。イメージの親は同じままです。サイズはそのままです。x と y の値を取得しても 206 と表示されますが、アクティビティの (206, 206) には配置されません。なぜこれが起こっているのか、私は迷っています。場所が物理的に変更されていることを除いて、画像が変更されたという兆候は見つかりません。

4

6 に答える 6

15

本当、こんなことがあってはならない。または、別の変数を設定して x と y を設定するか、x を取得して y を取得し、同じ場所のそれぞれに 0 を追加してみてください。

Android - Use of view.setX() and setY in api 8で述べたように、検索した場合は、api 8 の前でも機能する別のソリューションがあります。 LayoutParamsこのように機能します-

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);

より多くの情報があります。これが役立つことを願っています

于 2013-05-28T02:07:04.940 に答える
3

同じ問題に遭遇します。View.setLeft(int)/View.setTop(int)私のために働いた。

この回答の元の投稿以来、物事が変更され、最近のAndroidバージョンでは、古いバージョンで私のためにトリックを行っている間に予期しない結果が生じる可能性があることに注意してください。したがって、古いデバイス (android 3.0 以下) をターゲットにしている場合、これは役立つかもしれませんが、より一般的な解決策については、ここで他の回答も検討してください。

于 2013-12-10T10:37:18.760 に答える
0

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

于 2017-08-22T04:23:02.023 に答える