2012-11-15 29 views
6

मुझे संदेह है कि एंड्रॉइड की प्रकृति को देखते हुए यह संभव नहीं है, लेकिन क्या सभी प्रकार के अनुप्रयोगों पर दिखाए जाने वाले प्रकारों (शायद कैनवास ऑब्जेक्ट का उपयोग कर) का एक तरीका बनाने का कोई तरीका है?सभी अनुप्रयोगों के शीर्ष पर एक एंड्रॉइड कैनवास बनाएं?

इस परियोजना के लिए मेरा इरादा दुर्भावनापूर्ण नहीं है। मैंने विंडोज़ के लिए कुछ simple Color Filter software बनाए हैं जो बस सभी विंडोज़ के शीर्ष पर एक विंडो जोड़ता है, जो उपयोगकर्ता द्वारा चुने गए रंग से भरा हुआ है, और इसमें कम अस्पष्टता है। यह स्क्रीन पर एक हल्का रंग जोड़ता है जो स्कोप्टॉपिक सेंसिटीविटी सिंड्रोम वाले उपयोगकर्ताओं को लंबे समय तक कंप्यूटर का उपयोग करने में मदद करता है। मैं इस सॉफ्टवेयर का एक एंड्रॉइड संस्करण बनाना चाहता हूं। उदाहरण के लिए:

Color Filter for Android Example

बाईं ओर की छवि मूल है, और सही पर एक मैं क्या हासिल करने की कोशिश कर रहा हूँ।

क्या एंड्रॉइड के साथ ऐसा करने का कोई तरीका है? मैं समझता हूं कि एप्लिकेशन को सिस्टम सेवा के रूप में चलाने की आवश्यकता होगी ताकि यह अप्रत्याशित रूप से बंद न हो, लेकिन मेरे ज्ञान के लिए, अन्य अनुप्रयोगों के शीर्ष पर स्क्रीन पर सामान्य रूप से आकर्षित करने का कोई तरीका नहीं है। यदि संभव हो, तो क्या आप सुझाव दे सकते हैं कि कौन सी एपीआई देखना है?

उत्तर

11

यहाँ मैं क्या सोचता है काम कर सकते हैं:

आप निम्न मान की आवश्यकता होगी:

लाल, हरा, नीला, अल्फा और कंट्रास्ट (आर, जी, बी, एक, ग)

एक प्राथमिकता में

स्टोर उन्हें स्लाइडर्स उपयोग करने के बाद:

private SharedPreferences pref; 
    //In onCreate.. 
    this.pref = getSharedPreferences("pref", 0); 
    //Method to save the values in Preferences 
    private void save() 
    { 
    SharedPreferences.Editor localEditor = this.pref.edit(); 
    localEditor.putInt("a", this.a); 
    localEditor.putInt("r", this.r); 
    localEditor.putInt("g", this.g); 
    localEditor.putInt("b", this.b); 
    localEditor.putInt("c", this.c); 
    localEditor.commit(); 
    } 

परिभाषित एक परत Clas एस जो दृश्य को बढ़ाता है और कैनवास पर लागू मूल्यों को आकर्षित करने के लिए उपयोग किया जाता है।

import android.view.View; 
import android.graphics.Canvas; 
import android.content.Context; 

public class Layer extends View 
{ 
    private int a; 
    private int b; 
    private int g; 
    private int r; 

    public Layer(Context context){ 
    super(context) 
    } 

    protected void onDraw(Canvas canvas){ 
    super.onDraw(canvas); 
    canvas.drawARGB(this.a, this.r, this.g, this.b); 
    } 

    public void setColor(int a, int r, int g, int b){ 
    this.a = a; 
    this.r = r; 
    this.g = g; 
    this.b = b; 
    invalidate(); 
    } 
} 

अगला एक सेवा है जो इन मूल्यों में परिवर्तन को संभालने और उन्हें खिड़कियों को लागू करने के लिए माना जाता है लिखें।

public class ScreenAdjustService extends Service 
{ 
    //Handle everything here 
} 

// मानों Prefs निजी स्थिर परत दृश्य में जमा हो जाती है लागू करने के लिए विचारों घोषित; ... सार्वजनिक स्थैतिक int r; सार्वजनिक स्थिर int बी; सार्वजनिक स्थिर int जी; सार्वजनिक स्थैतिक int ए; सार्वजनिक स्थिर int सी;

onCreate विधि में,

प्राप्त मूल्यों पहले वरीयताओं में जमा हो जाती, पुनः प्राप्त मूल्यों की स्थापना के लिए

SharedPreferences localSharedPreferences = getSharedPreferences("pref", 0); 
a = localSharedPreferences.getInt("a", 0); 
r = localSharedPreferences.getInt("r", 0); 
g = localSharedPreferences.getInt("g", 0); 
b = localSharedPreferences.getInt("b", 0); 
c = localSharedPreferences.getInt("c", 0); 

सेट दृश्य,

view = new Layer(this); 
redView = new Layer(this); 
... 

खिड़की करने के लिए इन विचारों जोड़े

//Pass the necessary values for localLayoutParams 
WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams(...); 
WindowManager localWindowManager = (WindowManager)getSystemService("window"); 
localWindowManager.addView(view, localLayoutParams); 
localWindowManager.addView(redView, localLayoutParams); 
localWindowManager.addView(greenView, localLayoutParams); 

लिखें पुन: प्रयोज्य तरीकों

public static void setAlpha(int alpha){ 
     //Handle all conditions 
     view.setColor(alpha, 0, 0, 0); 
} 
public static void setContrast(int contrast){ 
    //Handle all conditions 
    view.setColor(c, 100, 100, 100); 
} 

public static void setRGB(int r, int g, int b){ 
    //Handle all conditions 
    redView.setColor(r, 255, 0, 0); 
    greenView.setColor(g, 0, 255, 0); 
    blueView.setColor(b, 0, 0, 255); 
} 

कॉल सेवा वर्ग का उपयोग कर

ScreenAdjustService.setRGB(MyActivity.this.r, MyActivity.this.g, MyActivity.this.b); 
ScreenAdjustService.setAlpha(MyActivity.this.a); 
ScreenAdjustService.setContrast(MyActivity.this.c); 

मत भूलना

<service android:name=".ScreenAdjustService " /> 

मैं हो सकता है प्रकट xml फ़ाइल में आपकी सेवा घोषित करने के लिए इन तरीकों जहां आवश्यक मैंने एक या दो चीज़ों को याद किया है क्योंकि मैंने इसे फ्लाई पर किया था, लेकिन मुझे लगता है कि इसे करना चाहिए।

+0

भी, आपको हर समय शीर्ष पर होने के लिए झंडे जोड़ने की जरूरत है। – tomwesolowski

+0

तो, इस दृष्टिकोण में यह ओवरलैड गतिविधि ओवरलैप्ड गतिविधि के लिए स्पर्श घटनाओं को कैसे पार कर रही है? – Paras

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^