दिलचस्प पोस्ट
संख्यात्मक शब्दशः पर यूएलएल प्रत्यय क्या सदिश में एक तत्व के सूचक को खोजने के लिए कोई आर समारोह है? मैं बिटमैप की रंग की गहराई कैसे देखूं? संख्याओं की एक सरणी का योग कैसे प्राप्त करें सबसे तेज़ बच्चे हैं () या jQuery में () ढूंढें? कुछ असिंक्रोनस कार्यों को पूरा करने का सरल तरीका, जावास्क्रिप्ट में? नल योग्य प्रकार संदर्भ प्रकार हैं? Win32 – सी कोड से बैक्रेस एचटीटीपी बनाम एचटीटीएस पर एचटीटीएस पर WSS जावा की आभासी मशीन और सीएलआर DLL 'SQLite.Interop.dll' लोड करने में असमर्थ जावास्क्रिप्ट में रेंज बनाना – अजीब वाक्यविन्यास एंड्रॉइड स्टूडियो 2.0 – ऐप के पहले रन पर पॉज़ / व्हाइट स्क्रीन मैं पायथन में रॉ सॉकेट का उपयोग कैसे करूं? किसी एक कड़ी में WHERE 1 = 1 और <conditions> का उपयोग क्यों करेगा?

ScrollView Insroll ScrollView

मैं जानता हूं कि Google के लोगों ने हमें एक स्क्रॉल करने योग्य दृश्य के अंदर स्क्रॉल करने योग्य दृश्य नहीं डालने का कहा है, लेकिन क्या हमें उनसे कोई आधिकारिक कथन नहीं है कि हम ऐसा करने का निर्देश न करें?

Solutions Collecting From Web of "ScrollView Insroll ScrollView"

क्या यह काफी करीब है?

आपको एक ListView के साथ एक क्षैतिज स्केल दृश्य का उपयोग कभी नहीं करना चाहिए, क्योंकि लिस्ट्यूव अपनी स्वयं की स्क्रॉलिंग का ख्याल रखता है। सबसे महत्वपूर्ण बात यह है कि यह सूची सूची में सभी महत्वपूर्ण ऑप्टिमाइजेशन को बड़ी सूचियों से निपटने के लिए परास्त करता है, क्योंकि यह प्रभावी रूप से सूची दृश्य को आभासी रूप से क्षैतिज सेक्रोल दृश्य द्वारा प्रदान किए जाने वाले अनंत कंटेनर को भरने के लिए अपनी पूरी सूची प्रदर्शित करने के लिए बाध्य करता है।

http://developer.android.com/reference/android/widget/HorizontalScrollView.html

अद्यतन करें:

चूंकि आपको एक दो आयामी स्क्रॉल वीव्यू का उपयोग करने के लिए मजबूर किया जा सकता है, तो आप इसका उपयोग करने पर विचार कर सकते हैं: blog.gorges.us/2010/06/android-two-dimensional-scrollview/ के इंटरनेट संग्रह

मैंने इसका इस्तेमाल नहीं किया है लेकिन यह उचित दृष्टिकोण हो सकता है

इसको आजमाओ

नोट: यहां parentScrollView अर्थ है बाह्य ScrollView और childScrollView का अर्थ है इनर childScrollView

 parentScrollView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { Log.v(TAG, "PARENT TOUCH"); findViewById(R.id.child_scroll).getParent() .requestDisallowInterceptTouchEvent(false); return false; } }); childScrollView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { Log.v(TAG, "CHILD TOUCH"); // Disallow the touch request for parent scroll on touch of child view v.getParent().requestDisallowInterceptTouchEvent(true); return false; } }); 

अतुल भारद्वाज के ऊपर का जवाब यह करने का सही तरीका है। लेकिन अगर किसी को इसे ScrollView पर लागू करने की आवश्यकता होती है, जहां आपके माता-पिता का कम नियंत्रण होता है, तो मुझे लगता है कि यह पर्याप्त लचीला है और जिस तरीके से काम करना है वह है:

 private void makeMyScrollSmart() { myScroll.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View __v, MotionEvent __event) { if (__event.getAction() == MotionEvent.ACTION_DOWN) { // Disallow the touch request for parent scroll on touch of child view requestDisallowParentInterceptTouchEvent(__v, true); } else if (__event.getAction() == MotionEvent.ACTION_UP || __event.getAction() == MotionEvent.ACTION_CANCEL) { // Re-allows parent events requestDisallowParentInterceptTouchEvent(__v, false); } return false; } }); } private void requestDisallowParentInterceptTouchEvent(View __v, Boolean __disallowIntercept) { while (__v.getParent() != null && __v.getParent() instanceof View) { if (__v.getParent() instanceof ScrollView) { __v.getParent().requestDisallowInterceptTouchEvent(__disallowIntercept); } __v = (View) __v.getParent(); } } 

फ़ंक्शन क्या करता है myScroll लिए स्पर्श श्रोता जो माता-पिता के स्पर्श को अवरुद्ध करता है जब बच्चे में स्पर्श शुरू होता है, और फिर स्पर्श वास्तव में समाप्त होने पर इसे वापस सक्षम करता है आपको माता-पिता ScrollView संदर्भ की आवश्यकता नहीं है और यह तत्काल अभिभावक नहीं है … यह तब तक प्रदर्शित सूची की यात्रा करेगा जब तक कि उसे यह पता न हो जाए

मेरी राय में दोनों दुनिया के सर्वश्रेष्ठ,

 childScrollView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: // Disallow ScrollView to intercept touch events. v.getParent().requestDisallowInterceptTouchEvent(true); break; case MotionEvent.ACTION_UP: // Allow ScrollView to intercept touch events. v.getParent().requestDisallowInterceptTouchEvent(false); break; } return false; } }); 

v.getParent () = माता-पिता स्क्रॉल देखें।

यहाँ एक संभव समाधान है जब एक बच्चे के अंत तक पहुंचे ScrollView यह नियंत्रण स्क्रॉल करने के लिए माता पिता ScrollView को पास करता है यह ScrollView में ScrollView और ListView के साथ काम करता है

चरण 1 – पैरेंट ऑन टूचलिस्ट को सेट करें

 parentScroll.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { v.getParent().requestDisallowInterceptTouchEvent(false); return false; } }); 

चरण 2 – बच्चों को ऑनटचलिस्ट (ScrollView या ListView) सेट करें

 aChildScrollView.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { v.getParent().requestDisallowInterceptTouchEvent(shouldRequestDisallowIntercept((ViewGroup) v, event)); return false; } }); aListView.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { v.getParent().requestDisallowInterceptTouchEvent(shouldRequestDisallowIntercept((ViewGroup) v, event)); return false; } }); 

चरण 3 – यहां सही कार्यक्षमता के लिए आवश्यक जादू पद्धतियां हैं

 protected boolean shouldRequestDisallowIntercept(ViewGroup scrollView, MotionEvent event) { boolean disallowIntercept = true; float yOffset = getYOffset(event); if (scrollView instanceof ListView) { ListView listView = (ListView) scrollView; if (yOffset < 0 && listView.getFirstVisiblePosition() == 0 && listView.getChildAt(0).getTop() >= 0) { disallowIntercept = false; } else if (yOffset > 0 && listView.getLastVisiblePosition() == listView.getAdapter().getCount() - 1 && listView.getChildAt(listView.getChildCount() - 1).getBottom() <= listView.getHeight()) { disallowIntercept = false; } } else { float scrollY = scrollView.getScrollY(); disallowIntercept = !((scrollY == 0 && yOffset < 0) || (scrollView.getHeight() + scrollY == scrollView.getChildAt(0).getHeight() && yOffset >= 0)); } return disallowIntercept; } protected float getYOffset(MotionEvent ev) { final int historySize = ev.getHistorySize(); final int pointerCount = ev.getPointerCount(); if (historySize > 0 && pointerCount > 0) { float lastYOffset = ev.getHistoricalY(pointerCount - 1, historySize - 1); float currentYOffset = ev.getY(pointerCount - 1); float dY = lastYOffset - currentYOffset; return dY; } return 0; } 

[…] क्या उनसे कोई आधिकारिक बयान है कि हमें ऐसा करने का निर्देश न दिया जाए?

मुझे लगता है कि ऐसा लगता है कि मुझे अपने नोट्स में ऐसा नहीं लगता है। मुझे पता है कि एक सूची गतिविधि में एक स्क्रॉल व्यू के रूप में देखने की कोशिश करते वक्त मुझे ऐसा बयान मिला मुझे लगता है कि वास्तव में एक तार्किक फोकस "बग" है जिस तरह से एंड्रॉइड यूआई सिस्टम नेस्टेड स्क्रूबल के साथ काम करता है, जिसे संभवतः डेवलपर को बेहतर ढंग से पता होना चाहिए और उन्हें सूचित किया जाना चाहिए। लेकिन मेरी सलाह है …

अंत में उपयोगकर्ता के लिए एक एकल स्क्रॉल दृश्य पर विचार करना बेहतर होगा। यह एक HTML पृष्ठ पर स्क्रॉल सलाखों के अंदर स्क्रॉल सलाखों की तरह है; यह कानूनी हो सकता है लेकिन इसका एक भयानक उपयोगकर्ता अनुभव है

दरअसल, इसके बारे में एक आधिकारिक बयान है, " लिस्ट्यूव्यू की दुनिया " नामक एक पुरानी वीडियो पर। वे कहते हैं कि किसी भी स्क्रॉल करने योग्य दृश्य को दूसरे में नहीं रखा (जब दोनों एक ही दिशा में हैं)।

हालांकि, अब हमारे पास एक नया दृश्य है जो एक ही समय में दोनों दृश्य स्क्रॉल करने की अनुमति देता है, संभवतः एक अच्छा प्रभाव दिखाने के लिए:

https://developer.android.com/reference/android/support/v4/widget/NestedScrollView.html

इसके लिए मुझे कोई उदाहरण नहीं मिला, इसलिए मैंने जो लिखा वह सिर्फ यह है कि यह क्या करता है और इसके लिए क्या उपयोग किया जाता है।

मुझे एक बहुत अच्छा समाधान मिला कृपया इस कोड का उपयोग करें

  parentScrollView.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { Utils.showLog("PARENT TOUCH"); findViewById(R.id.activity_mesh_child_scrollView).getParent().requestDisallowInterceptTouchEvent(false); return false; } }); childScrollView.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { Utils.showLog("CHILD TOUCH"); // Disallow the touch request for parent scroll on touch of child view v.getParent().requestDisallowInterceptTouchEvent(true); return false; } }); 

यह निश्चित रूप से काम करेगा कृपया कोशिश करो और मुझे बताओ कि काम नहीं कर रहा है

आप एक ScrollView को एक और ScrollView के अंदर रख सकते हैं। बस टच इवेंट विधि को ओवरराइड करने के लिए बच्चे स्क्रॉल्यूव्यू का विस्तार करें। इस तरह

 import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; public class ChildScrollView extends android.widget.ScrollView { private int parent_id; public ChildScrollView(Context context) { super(context); } public ChildScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public ChildScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onTouchEvent(MotionEvent event){ requestDisallowInterceptTouchEvent(true); return super.onTouchEvent(event); } } 

यहां, मैंने ScrollView के अंदर ScrollView से संबंधित एक नमूना प्रोजेक्ट बनाया है एक दृश्य स्क्रॉल दोनों तरीके हैं इसकी जांच – पड़ताल करें :-

मुख्य गतिविधि। जावा –

 package com.example.dev_task_193_scrollview; import com.example.dev_task_196_scrollview.R; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.HorizontalScrollView; import android.widget.ImageView; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.Toast; public class MainActivity extends Activity implements View.OnClickListener{ ImageView imageView1,imageView2,imageView3,IVimage1,IVimage2,IVimage3,IVimage4,IVimage5,IVimage6; ListView listView1,listView2; HorizontalScrollView horizontalScrollView1,horizontalScrollView2; ScrollView parentScrollView, scrollView1; RelativeLayout relativeLayout1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String[] values = new String[] { "Android", "iPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2", "Android", "iPhone", "WindowsMobileWindowsMobileWindowsMobileWindowsMobile" }; relativeLayout1 = (RelativeLayout) findViewById(R.id.relativeLayout1); imageView1 = (ImageView) findViewById(R.id.imageView1); imageView1.setBackgroundResource(R.drawable.info); imageView2 = (ImageView) findViewById(R.id.imageView2); imageView2.setBackgroundResource(R.drawable.info); imageView3 = (ImageView) findViewById(R.id.imageView3); imageView3.setBackgroundResource(R.drawable.info); listView1 = (ListView) findViewById(R.id.listView1); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, values); listView1.setAdapter(adapter); listView2 = (ListView) findViewById(R.id.listView2); ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, R.layout.list_item, values); listView2.setAdapter(adapter1); parentScrollView = (ScrollView) findViewById(R.id.parentScrollView); scrollView1 = (ScrollView) findViewById(R.id.scrollView1); horizontalScrollView1 = (HorizontalScrollView) findViewById(R.id.horizontalScrollView1); horizontalScrollView2 = (HorizontalScrollView) findViewById(R.id.horizontalScrollView2); IVimage1 = (ImageView) findViewById(R.id.IVimage1); IVimage2 = (ImageView) findViewById(R.id.IVimage2); IVimage3 = (ImageView) findViewById(R.id.IVimage3); IVimage4 = (ImageView) findViewById(R.id.IVimage4); IVimage5 = (ImageView) findViewById(R.id.IVimage5); IVimage6 = (ImageView) findViewById(R.id.IVimage6); scrollView1.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // Disallow the touch request for parent scroll on touch of child view parentScrollView.requestDisallowInterceptTouchEvent(true); return false; } }); horizontalScrollView1.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // Disallow the touch request for parent scroll on touch of child view parentScrollView.requestDisallowInterceptTouchEvent(true); return false; } }); listView1.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // Disallow the touch request for parent scroll on touch of child view parentScrollView.requestDisallowInterceptTouchEvent(true); return false; } }); listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), "Clicked "+parent.getItemAtPosition(position).toString(), Toast.LENGTH_SHORT).show(); } }); listView2.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), "Clicked "+parent.getItemAtPosition(position).toString(), Toast.LENGTH_SHORT).show(); } }); listView2.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // Disallow the touch request for parent scroll on touch of child view parentScrollView.requestDisallowInterceptTouchEvent(true); return false; } }); horizontalScrollView2.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // Disallow the touch request for parent scroll on touch of child view parentScrollView.requestDisallowInterceptTouchEvent(true); return false; } }); /*imageView1.setOnClickListener(this); imageView2.setOnClickListener(this); imageView3.setOnClickListener(this);*/ IVimage1.setOnClickListener(this); IVimage2.setOnClickListener(this); IVimage3.setOnClickListener(this); IVimage4.setOnClickListener(this); IVimage5.setOnClickListener(this); IVimage6.setOnClickListener(this); imageView1.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // Disallow the touch request for parent scroll on touch of child view parentScrollView.requestDisallowInterceptTouchEvent(true); Toast.makeText(getApplicationContext(), "Clicked "+v.getTag(), Toast.LENGTH_SHORT).show(); return false; } }); imageView2.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // Disallow the touch request for parent scroll on touch of child view parentScrollView.requestDisallowInterceptTouchEvent(true); Toast.makeText(getApplicationContext(), "Clicked "+v.getTag(), Toast.LENGTH_SHORT).show(); return false; } }); imageView3.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // Disallow the touch request for parent scroll on touch of child view parentScrollView.requestDisallowInterceptTouchEvent(true); Toast.makeText(getApplicationContext(), "Clicked "+v.getTag(), Toast.LENGTH_SHORT).show(); return false; } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onClick(View v) { switch(v.getId()){ case R.id.imageView1: Toast.makeText(getApplicationContext(), "Clicked "+v.getTag(), Toast.LENGTH_SHORT).show(); break; case R.id.imageView2: Toast.makeText(getApplicationContext(), "Clicked "+v.getTag(), Toast.LENGTH_SHORT).show(); break; case R.id.imageView3: Toast.makeText(getApplicationContext(), "Clicked "+v.getTag(), Toast.LENGTH_SHORT).show(); break; case R.id.IVimage1: Toast.makeText(getApplicationContext(), "Clicked "+v.getTag(), Toast.LENGTH_SHORT).show(); break; case R.id.IVimage2: Toast.makeText(getApplicationContext(), "Clicked "+v.getTag(), Toast.LENGTH_SHORT).show(); break; case R.id.IVimage3: Toast.makeText(getApplicationContext(), "Clicked "+v.getTag(), Toast.LENGTH_SHORT).show(); break; case R.id.IVimage4: Toast.makeText(getApplicationContext(), "Clicked "+v.getTag(), Toast.LENGTH_SHORT).show(); break; case R.id.IVimage5: Toast.makeText(getApplicationContext(), "Clicked "+v.getTag(), Toast.LENGTH_SHORT).show(); break; case R.id.IVimage6: Toast.makeText(getApplicationContext(), "Clicked "+v.getTag(), Toast.LENGTH_SHORT).show(); break; } // TODO Auto-generated method stub } } 

activity_main.xml –

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/parentScrollView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="5dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:layout_marginTop="5dp" android:background="@drawable/login_bg" > <RelativeLayout android:id="@+id/relativeLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" > <ScrollView android:id="@+id/scrollView1" android:layout_width="fill_parent" android:layout_height="300dp" > <HorizontalScrollView android:id="@+id/horizontalScrollView1" android:layout_width="match_parent" android:layout_height="300dp" android:fillViewport="false" > <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:background="@drawable/bg" > <ImageView android:id="@+id/imageView1" android:layout_width="300dp" android:layout_height="400dp" android:tag="imageView1" /> <ImageView android:id="@+id/imageView2" android:layout_width="300dp" android:layout_height="400dp" android:layout_toRightOf="@+id/imageView1" android:tag="imageView2" /> <ImageView android:id="@+id/imageView3" android:layout_width="300dp" android:layout_height="400dp" android:layout_toRightOf="@+id/imageView2" android:tag="imageView3" /> </RelativeLayout> </HorizontalScrollView> </ScrollView> <ListView android:id="@+id/listView1" android:layout_width="500dp" android:layout_height="400dp" android:layout_below="@+id/scrollView1" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:background="@drawable/ic_launcherwrweq" > </ListView> <HorizontalScrollView android:id="@+id/horizontalScrollView2" android:layout_width="300dp" android:layout_height="wrap_content" android:layout_below="@+id/listView1" android:layout_centerHorizontal="true" android:layout_gravity="center" android:layout_marginTop="5dp" android:background="@drawable/claim_detail_header_bg" android:fillViewport="true" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:id="@+id/IVimage1" android:layout_width="125dp" android:layout_height="125dp" android:padding="15dp" android:src="@drawable/a" android:tag="a" > </ImageView> <ImageView android:id="@+id/IVimage2" android:layout_width="125dp" android:layout_height="125dp" android:padding="15dp" android:src="@drawable/b" android:tag="b" > </ImageView> <ImageView android:id="@+id/IVimage3" android:layout_width="125dp" android:layout_height="125dp" android:padding="15dp" android:src="@drawable/c" android:tag="c" > </ImageView> <ImageView android:id="@+id/IVimage4" android:layout_width="125dp" android:layout_height="125dp" android:padding="15dp" android:src="@drawable/g" android:tag="g" > </ImageView> <ImageView android:id="@+id/IVimage5" android:layout_width="125dp" android:layout_height="125dp" android:padding="15dp" android:src="@drawable/e" android:tag="e" > </ImageView> <ImageView android:id="@+id/IVimage6" android:layout_width="125dp" android:layout_height="125dp" android:padding="15dp" android:src="@drawable/f" android:tag="f" > </ImageView> </LinearLayout> </HorizontalScrollView> <ListView android:id="@+id/listView2" android:layout_width="500dp" android:layout_height="400dp" android:layout_below="@+id/horizontalScrollView2" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:background="@drawable/ic_launcherwrweq" > </ListView> </RelativeLayout> </ScrollView> 

list_item.xml (सूची दृश्य के लिए) –

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:textSize="25sp" android:maxLines="1" android:singleLine="true" /> 

एंड्रॉइड सपोर्ट v4 लाइब्रेरी में नेस्टेडक्रॉलव्यू नामक एक क्लास है।

नेस्टेड स्क्रॉल व्यू देखें: http://ivankocijan.xyz/android-nestedscrollview/

अगर कोई इस पर उत्तर देने की तलाश कर रहा है, तो मेरे पास थोड़ा अलग कार्यान्वयन था। मैंने ScrollView क्लास को बढ़ाया और बच्चे में टच एलिसनर पर लागू किया, और इसे कन्स्ट्रक्टर में स्वयं में सेट कर दिया।

ऑनटच कॉलबैक में, यदि गति घटना ऑब्जेक्ट 2 के रूप में सूचक संख्या के लिए एक मान के साथ आया, तो मैं सच हो गया, अन्यथा गलत। इस तरह, यदि दो उंगलियां स्क्रीन पर चलती हैं, तो इसे इसे ज़ूम करने के लिए एक चुटकी के रूप में माना जाएगा, अन्यथा यह सामान्य स्क्रॉल के रूप में विचार करेगा। मैंने माता-पिता स्पर्श अक्षम आदि के लिए अनुरोध नहीं किया।

 @Override public boolean onTouch(View view, MotionEvent motionEvent) { if(motionEvent.getPointerCount() == 2){ mCallbacks.onPinchZoomAction(motionEvent); return true; } return false; } 

यह न केवल Google अपनी बुरी आदतें कहता है, यह सिर्फ इतना समझ में नहीं आता है। मान लें कि आपके पास दो ऊर्ध्वाधर स्क्रॉल दृश्य हैं जो एक दूसरे के अंदर नेस्टेड हैं। जब आप स्क्रॉल दृश्यों पर उंगली ले जाते हैं, तो आप को किन या किसी बाहरी स्थान पर ले जाना चाहते हैं?

आपको अपनी UI देसी को उस चीज़ पर पुनर्विचार करना चाहिए जिसके लिए इसकी आवश्यकता नहीं है, एक महान UI बनाने के कई तरीके हैं और फिर भी इसे वास्तव में सरल रखें