Rumah  >  Artikel  >  Kesan klik pada koordinat x dan y tertentu dalam imageView

Kesan klik pada koordinat x dan y tertentu dalam imageView

WBOY
WBOYke hadapan
2024-02-14 08:06:091015semak imbas

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!

Kandungan soalan

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?

Penyelesaian

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam