質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.22%

Image Viewの座標について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 324

sen10

score 9

質問内容

activity_main.xml内の下にある二つ目のImageViewについて質問があります。
android:layout_marginTop="dp"
android:layout_marginLeft="dp"
のそれぞれの“dp”の前にMainActivity.javaの中にある
double k=a * i / e;
double l=d * j / f;
のkとlの数値を入れたいのですが、どのようにすればいいのかわかりません。
どのようにコードを打ち込めばよいのか教えていただけないでしょうか。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        >


            <ImageView
                android:layout_width="360dp"
                android:layout_height="225dp"
                android:src="@drawable/tizu2"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />


                <ImageView
                    android:layout_width="15dp"
                    android:layout_height="15dp"
                    android:src="@drawable/azaz"
                    android:layout_marginTop="dp"
                    android:layout_marginLeft="dp"
                    />

    </FrameLayout>
</android.support.constraint.ConstraintLayout>
public class MainActivity extends AppCompatActivity implements LocationListener{

    private Location location1;

    double Lati = location1.getLatitude();
    double Longi = location1.getLongitude();

    double a=360;
    double b=33.098;
    double c=131.2063;
    double d=225;
    double e=0.0217;
    double f=0.041;
    double g=location1.getLatitude();
    double h=location1.getLongitude();
    double i=b - g;
    double j=h - c;
    double k=a * i / e;
    double l=d * j / f;


        LocationManager locationManager;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_FINE_LOCATION) !=
                    PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.ACCESS_FINE_LOCATION,},
                        1000);
            } else {
                locationStart();

                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                        1000, 50, this);

            }
        }

        private void locationStart() {
            Log.d("debug", "locationStart()");

            // LocationManager インスタンス生成
            locationManager =
                    (LocationManager) getSystemService(LOCATION_SERVICE);

            if (locationManager != null && locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                Log.d("debug", "location manager Enabled");
            } else {
                // GPSを設定するように促す
                Intent settingsIntent =
                        new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(settingsIntent);
                Log.d("debug", "not gpsEnable, startActivity");
            }

            if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_FINE_LOCATION) !=
                    PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000);

                Log.d("debug", "checkSelfPermission false");
                return;
            }

            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                    1000, 50, this);

        }

        // 結果の受け取り

        /**
         * Android Quickstart:
         * https://developers.google.com/sheets/api/quickstart/android
         * <p>
         * Respond to requests for permissions at runtime for API 23 and above.
         *
         * @param requestCode  The request code passed in
         *                     requestPermissions(android.app.Activity, String, int, String[])
         * @param permissions  The requested permissions. Never null.
         * @param grantResults The grant results for the corresponding permissions
         *                     which is either PERMISSION_GRANTED or PERMISSION_DENIED. Never null.
         */
        @Override
        public void onRequestPermissionsResult(
                int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            if (requestCode == 1000) {
                // 使用が許可された
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Log.d("debug", "checkSelfPermission true");

                    locationStart();

                } else {
                    // それでも拒否された時の対応
                    Toast toast = Toast.makeText(this,
                            "これ以上なにもできません", Toast.LENGTH_SHORT);
                    toast.show();
                }
            }
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            switch (status) {
                case LocationProvider.AVAILABLE:
                    Log.d("debug", "LocationProvider.AVAILABLE");
                    break;
                case LocationProvider.OUT_OF_SERVICE:
                    Log.d("debug", "LocationProvider.OUT_OF_SERVICE");
                    break;
                case LocationProvider.TEMPORARILY_UNAVAILABLE:
                    Log.d("debug", "LocationProvider.TEMPORARILY_UNAVAILABLE");
                    break;
            }
        }

        @Override
        public void onLocationChanged(Location location) {

            location1 = location;

        }

        @Override
        public void onProviderEnabled(String provider) {

        }

        @Override
        public void onProviderDisabled(String provider) {

        }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

ImageViewの位置を動かしたいのなら、marginを使うよりもtranslationで指定した方が簡単かつ動作も軽いです。

ImageView imageView = findViewById(...);
imageView.setTranslationX(k);
imageView.setTranslationY(l);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/27 10:48

    回答ありがとうございます!
    とても役立つアドバイスです!
    今、新しい質問をさせていただいたのでそちらも何かアドバイスを頂けると幸いです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る