मैं कोशिश कर रहा था इस सवाल में पूछे गए सटीक प्रभाव को प्राप्त करने के लिए। मैं इसके साथ संघर्ष करता हूं और फिर मैंने @wnafee जवाब पढ़ा (मैं इसे बाहर नहीं कर सका)।
लेकिन फिर मैं जवाब से बहुत आसान ध्वनि को लागू करने के लिए संघर्ष करता हूं। मुझे इसे लागू करने में बहुत परेशानी थी, कि मुझे सही ढंग से जवाब नहीं समझा, लेकिन पहुंच योग्य API के बहुत से मुद्दे थे क्योंकि मैं संगतता लाइब्रेरी के उसी पैकेज में काम नहीं कर रहा था।
कुछ दृष्टिकोणों की कोशिश करने के बाद (उनमें से कोई भी सफल नहीं हुआ, और वे बहुत जटिल थे) मैं थोड़ा अलग दिशा में गया, और अब यह एक आकर्षण की तरह काम करता है। मैंने कुछ प्रतिबिंब का उपयोग किया, जिन लोगों ने कभी इसका इस्तेमाल नहीं किया, चिंता न करें यह वास्तव में प्रतिबिंब का मूल है।
मुझे यकीन नहीं है कि यह सबसे अच्छा समाधान है, लेकिन यह मेरे लिए काम करता है, इसलिए यदि आप इसका उपयोग करना चाहते हैं तो आपका स्वागत है। कृपया Wnafee उदाहरण पढ़ें क्योंकि यह कुछ चीजें बताता है जो मैंने किया था।
इस कार्य को पूरा करने के लिए आपको बस मेरे तीन भागों के समाधान का पालन करना चाहिए। (3-10 मिनट के बीच ले जाएगा) का
भाग I:
रूप Wnafee कहा मैं सिर्फ नकल द्वारा अपने ही EdgeEffect वर्ग here से स्रोत कोड पेस्ट बना दिया,
(बस बनाने के अपने स्वयं के परियोजना बाद से वे एंड्रॉयड के लिए आंतरिक रहे हैं)
को AOSP/res/drawable निर्देशिका में overscroll_edge कॉपी और ड्रॉएबल overscroll_glow करने के लिए सुनिश्चित
- मैं घोषणा करता हूं कि वर्ग EdgeEffectCompat फैली (मैं अपने वर्ग
EdgeEffectForEarlyVersions
कहा जाता है): मैं केवल 2 वास्तव में छोटे परिवर्तन किया था। public class EdgeEffectForEarlyVersions extends EdgeEffectCompat
। इस परिवर्तन को करने का कारण यह है कि mLeftEdge
और mRightEdge
EdgeEffectCompat
प्रकार के हैं।
- "मेरी" नई कक्षा के निर्माता की पहली पंक्ति में मैंने मूल निर्माता
super(context);
पर एक कॉल जोड़ा। चूंकि EdgeEffectCompat
पर कोई डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है, इसलिए आपको स्पष्ट रूप से निर्माता को कॉल करना होगा।
भाग द्वितीय
कि इसके अलावा मैं एक समारोह में लिखा था। फ़ंक्शन का उद्देश्य यह है कि प्रारंभिक संस्करण (आईसीएस से पहले) के मामले में हम EdgeEffectForEarlyVersions
का उपयोग करना चाहते हैं जिसे हमने अभी कॉपी किया है। उस उद्देश्य को पाने के लिए मैंने प्रतिबिंब का उपयोग किया।
इस समारोह है:
private static void changeEdgeEffectCompactOnEarlyVersions(ViewPager viewPager, Context context)
{
/* In case that the version is earlier than 14 there is only empty implementation for the edge effect, therefore we change it.
* for more information look on the following links:
* 1. http://stackoverflow.com/questions/10773565/visual-indication-of-over-scroll-in-android
* 2. http://grepcode.com/file/repo1.maven.org/maven2/com.google.android/support-v4/r7/android/support/v4/view/ViewPager.java#ViewPager.0mLeftEdge
* 3. http://grepcode.com/file/repo1.maven.org/maven2/com.google.android/support-v4/r7/android/support/v4/widget/EdgeEffectCompat.java#EdgeEffectCompat
*/
if (Build.VERSION.SDK_INT < 14)
{
try
{
Class<ViewPager> viewPagerClass = ViewPager.class;
//Get the left edge field, since it is private we used getDeclaredField and not getDeclared
Field leftEdge = viewPagerClass.getDeclaredField("mLeftEdge");
leftEdge.setAccessible(true);
//Get the right edge field, since it is private we used getDeclaredField and not getDeclared
Field rightEdge = viewPagerClass.getDeclaredField("mRightEdge");
rightEdge.setAccessible(true);
EdgeEffectForEarlyVersions leftEdgeEffect = new EdgeEffectForEarlyVersions(context);
EdgeEffectForEarlyVersions rightEdgeEffect = new EdgeEffectForEarlyVersions(context);
//Set the mLeftEdge memeber of viewPager not to be the default one, but to be "our" edgeEffect
leftEdge.set(viewPager, leftEdgeEffect);
//Set the mRightEdge memeber of viewPager not to be the default one, but to be "our" edgeEffect
rightEdge.set(viewPager, rightEdgeEffect);
}
catch (Exception ex)
{
Log.e("refelection", ex.getMessage());
}
}
}
भाग III
अब सब वहाँ ऐसा करने के लिए छोड़ दिया जाता है, तो आप ViewPager उदाहरण और अधिक कुछ भी नहीं है के बाद कि समारोह कॉल करने के लिए है।
मुझे आशा है कि यह किसी की मदद करेगा।
कि नहीं था क्या उसने पूछा। वह विशेष रूप से जानना चाहता था कि आईओएस पर रबर बैंड जैसे overscroll-effect कैसे करें, जो कम से कम आईसीएस तक ViewPager में गायब है। –