Editor PHP Xigua hari ini akan memperkenalkan kepada anda cara untuk mengesan klik pada koordinat x dan y tertentu dalam imageView. Apabila membangunkan aplikasi mudah alih, kami selalunya perlu memproses peristiwa sentuhan pengguna, terutamanya untuk acara klik dalam kawalan paparan imej (seperti imageView), kami perlu mendapatkan maklumat lokasi klik pengguna dengan tepat. Artikel ini akan menerangkan secara terperinci cara menggunakan kaedah yang berkaitan dalam Android Studio untuk melaksanakan fungsi ini, membantu pembangun mengendalikan operasi klik pengguna dengan lebih baik. Mari lihat!
Saya mempunyai imej pada desktop saya, saya telah membukanya menggunakan aplikasi Paint dan mendapat kedudukan tertentu yang mengandungi piksel x dan y, contohnya: 374,207 px Tetapi apabila saya menambah imej ke aplikasi android saya dan menggunakan sebagai contoh koordinat sentuhan, bukankah mereka sama? Apabila saya mengklik pada kedudukan yang sama dalam paparan imej saya mendapat nilai yang berbeza dan akibatnya bilangan kedudukan jauh lebih tinggi daripada nombor dalam pc saya.
Saya telah menyelesaikan masalah ini selama kira-kira tiga hari dan sekarang saya memerlukan bantuan anda.
Saya mencuba penyelesaian yang berbeza di web, seperti cuba menyongsangkan kedudukan sentuhan untuk mendapatkan nilai piksel, seperti dalam contoh di bawah: http://android-er.blogspot.com/2012/10/get-touched-pixel-color-of-scaled.html?m=1
Tetapi koordinat x dan y yang saya dapat adalah berbeza x:592 y:496
Ini ialah kod apl android saya:
View.OnTouchListener imgSourceOnTouchListener = new View.OnTouchListener(){ @Override public boolean onTouch(View view, MotionEvent event) { float eventX = event.getX(); float eventY = event.getY(); float[] eventXY = new float[] {eventX, eventY}; Matrix invertMatrix = new Matrix(); ((ImageView)view).getImageMatrix().invert(invertMatrix); invertMatrix.mapPoints(eventXY); int x = Integer.valueOf((int)eventXY[0]); int y = Integer.valueOf((int)eventXY[1]); Drawable imgDrawable = ((ImageView)view).getDrawable(); Bitmap bitmap = ((BitmapDrawable)imgDrawable).getBitmap(); //Limit x, y range within bitmap if(x < 0){ x = 0; }else if(x > bitmap.getWidth()-1){ x = bitmap.getWidth()-1; } if(y < 0){ y = 0; }else if(y > bitmap.getHeight()-1){ y = bitmap.getHeight()-1; } Log.d(TAG,"X:"+x+" Y:"+y); return true; }};
Sunting: Nampaknya ia ada kaitan dengan mengezum masuk pada imej, tetapi kini persoalannya ialah bagaimana untuk memetakan imej yang dizum dengan nilai x dan y dalam pangkalan data?
Alihkan komen untuk menjawab.
Dengan mengandaikan anda tahu dimensi asal (dari pangkalan data?) dan boleh menggunakan wrap_content pada paparan kemudian gunakan (lebar sebagai contoh):
public boolean onTouch(View v, MotionEvent event) { // get actual width of view on screen (pixels) int w = v.getWidth(); // x coordinate in view's coordinate space float tw = event.getX(); // ratio between x coordinate and view width float ratioVw = (tw / w); // apply same ratio to original image width. int origTouchX = (int) (ratioVw * (origW)); //(origW is original width). return true; }
Ulang ketinggian (y).
Atas ialah kandungan terperinci Kesan klik pada koordinat x dan y tertentu dalam imageView. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!