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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

4127閲覧

Xamarin.Androido(VisualStudio2015)で画面のタップ位置を取得する方法

tokage

総合スコア10

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2016/08/10 08:12

###前提・実現したいこと
Xamarin.Androido(VisualStudio 2015)での質問です。
Androidの画面のタップした位置(座標)を取得する方法を教えてください。

DrawBitmapでクリップして作成された画像の配列をタップすると、その位置の画像がimg1からimg2の物に切り替わるというプログラムを作成しています。
カードの裏表を切り替えるイメージです。

少なくとも、タップした位置の座標を取得できれば、あとは計算でどのカードが
タップされたかは割り出せるかと考えました。
なので、画面のタップ位置を取得する方法を教えていただきたいです。

下記のプログラムは、img1の状態で並べて表示する所まで作成しています。
タップされたら、その部分の画像をimg2に切り替えることで、
rect1をいじらずに変更したいと考えています。
(最終的には、rect幅を画面に合わせて入力し、
カードの並びをランダムにしますが、それは今は不要です)

初歩的な質問で申し訳ありませんが、回答をよろしくおねがいします。
また、質問に至らない点がありましたら、ご指摘をお願いします。

###該当のソースコード

namespace App { [Activity(Label = "tes", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity { protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); RequestWindowFeature(WindowFeatures.NoTitle); SetContentView(new Class1(this)); } } } namespace App { public class Class1 : View { Bitmap Img1 = null; Bitmap Img2 = null; int[,] card = new int[8,8]; public Class1(Context context) : base(context) { var Image1 = context.Resources.GetIdentifier("Image1", "drawable", context.PackageName); Img1 = BitmapFactory.DecodeResource(context.Resources, Image1); var Image2 = context.Resources.GetIdentifier("Image2", "drawable", context.PackageName); Img2 = BitmapFactory.DecodeResource(context.Resources, Image2); for (int y = 0; y < 8; y++) { for (int x = 0; x < 8; x++) { card[x, y] = 0; } } } public override void Draw(Canvas canvas) { base.Draw(canvas); for (int y = 0; y < 8; y++) { for (int x = 0; x < 8; x++) { rect1 = new Rect(x * 100, y * 100, (x * 100) + 100, (y * 100) + 100); rect2 = new Rect(x * 50, y * 50, (x * 50) + 50, (y * 50) + 50); switch (card[x, y]) { case 0: canvas.DrawBitmap(Img1, rect1, rect2, null); break; case 1: canvas.DrawBitmap(Img2, rect1, rect2, null); break; } } } } } }

###試したこと
google等で調べ、MotionEvent、OnTouchEventなどのクラス、メソットの存在はわかりましたが、
javaやIos、Xamarin.Formsの資料ばかりで、構文がよく分かりませんでした。

表示する画像の数が多いので(さらに増やす可能性もあり)、ImageViewを使うやり方は避けたほうが良いかと思い、このコードを作成しました。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Android.Views.Viewが基底クラスなのだから、こんな感じを追加することでいけませんか?

c#

1public override bool OnTouchEvent(MotionEvent e) 2{ 3 switch (e.Action) 4 { 5 case MotionEventActions.Down: 6 float x = e.GetX(); 7 Console.WriteLine(x.ToString()); 8 break; 910 } 11 return true; 12}

投稿2016/08/10 13:28

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokage

2016/08/10 13:51

実行したところ、座標の取得ができました。 迅速な回答に感謝します。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問