2013-08-06 5 views
16

मैं इस->(एंड्रॉइड) मैं छवि का एक हिस्सा कैसे दिखा सकता हूं?

enter image description here

की तरह एक छवि है और मैं तो मैं चुन सकते हैं कि कितना मैं देख सकता हूँ इस->

enter image description here

की तरह दिखाना चाहते हैं (0 ~ 1 , 0 = देख नहीं सकता, 1 = पूरी तस्वीर, 0.5 = आधा चित्र, .... आदि, उपयोगकर्ता इनपुट से पढ़ें)

यह कैसे करें?

मैंने android:scaleType का उपयोग करने की कोशिश की लेकिन यह काम नहीं कर रहा है।

+0

http://stackoverflow.com/questions/14544327/make-image-appear-half-of-the-screen – Rohit

उत्तर

19

मेरा सबसे अच्छा सुझाव BitmapDrawable को ClipDrawable के साथ लपेटना है।

क्लिपड्राउबल आपको किसी अन्य ड्रॉइंग के लिए क्लिपिंग को परिभाषित करने देता है, इसलिए पूरे ड्रॉइंग को खींचने के बजाय, इसका केवल एक हिस्सा खींचा जाएगा।

यह कैसे काम करेगा? आपकी छवि दृश्य एक ड्रॉबल प्रदर्शित कर सकता है - setImageDrawable() के माध्यम से असाइन करने योग्य। स्वाभाविक रूप से, आप वहां अपनी छवि बिटमैप का बिटमैप ड्रायबल रखेंगे। यदि आप पहले अपने बिटमैप ड्रावेबल को क्लिपड्राउबल के साथ लपेटते हैं, और केवल तब छवि दृश्य को असाइन करते हैं, तो आपको ठीक होना चाहिए।

<ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:src="@drawable/clip_source" /> 

और इस clip_source drawable है:

<?xml version="1.0" encoding="utf-8"?> 
<clip xmlns:android="http://schemas.android.com/apk/res/android" 
    android:clipOrientation="vertical" 
    android:drawable="@drawable/your_own_drawable" 
    android:gravity="top" /> 

आप अपने ClipDrawable (clip_source) पर समारोह setLevel() फोन करके कतरन की राशि निर्धारित कर सकते हैं। 0 का स्तर का मतलब है कि छवि पूरी तरह से छिपी हुई है और 10000 का स्तर है कि छवि पूरी तरह से प्रकट हुई है। आप बीच में किसी भी int मान का उपयोग कर सकते हैं।

आपको कोड में स्तर सेट करना होगा, इसलिए आपके कोड को पहले क्लिपड्रायबल का संदर्भ प्राप्त करना चाहिए। आप अपने छवि दृश्य उदाहरण पर getDrawable() चलाकर ऐसा कर सकते हैं। जब आपके क्लिपड्राउबल का संदर्भ हो, तो बस उस पर setLevel(5000) चलाएं (या कोई अन्य नंबर 0-10000)।

ImageView img = (ImageView) findViewById(R.id.imageView1); 
mImageDrawable = (ClipDrawable) img.getDrawable(); 
mImageDrawable.setLevel(5000); 
+0

कैसे setLevel के लिए? कृपया इसके बारे में अधिक परिभाषित करें। –

+2

जोड़ा गया स्पष्टीकरण – talkol

+0

बहुत बढ़िया। बहुत बहुत धन्यवाद। – Neela

0

यहां एक आसान तरीका है .. बस अपनी छवियों के लिए अपने मुख्य लेआउट में एक अलग लेआउट बनाएं। सुनिश्चित करें कि यह वास्तविक है। अब लेआउट के साथ अपनी तस्वीरों के लिए अपनी छवि दृश्य डालें और इसे माता-पिता भरें। ठीक है अब एक खाली छवि बनाएं और उस छवि दृश्य को लेआउट के नीचे और लेआउट के केंद्र में शीर्ष पर जोड़ें। छवियों के मार्जिन और आकार के साथ बस गड़बड़ करें जब तक कि आप इसे जिस तरह से दिखाना चाहते हैं। उम्मीद है की यह मदद करेगा।

+0

दूसरा inageview उदाहरण के लिए सिर्फ सफेद हो सकता है। मुख्य छवि दृश्य के निचले हिस्से को छिपाने के लिए। – NightSkyCode

2

यहाँ एक और तरीका नीचे लाइन में यहाँ इस

public static Bitmap getScaleBitmap(Bitmap bitmap) { 

     Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
     bitmap.getHeight(), Config.ARGB_8888); 
     Canvas canvas = new Canvas(output); 

     final int color = 0xff424242; 
     final Paint paint = new Paint(); 
     final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()/2); 
     final RectF rectF = new RectF(rect); 
     final float roundPx = 0; 

     paint.setAntiAlias(true); 
     canvas.drawARGB(0, 0, 0, 0); 
     paint.setColor(color); 
     canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 
     paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
     canvas.drawBitmap(bitmap, rect, rect, paint); 

    return output; 
} 

प्राप्त करने के लिए है

final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()/2); 

hight सेट के रूप में आप की आवश्यकता होती है ..

:)

+0

केंद्र फसल को कैसे कार्यान्वित करें। –

+0

क्या आपका मतलब गोल या आयताकार है? –

+0

क्लिप मेरे लिए काम नहीं किया, लेकिन यह किया :) – Makalele

0

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

मैं छवि को उस लेआउट में लपेटता हूं जो आइकन के रूप में आधा लंबा है और जानबूझकर आइकन के आकार के वास्तविक आकार में है। स्क्रॉल वाई सेट के बिना, यह केवल छवि के शीर्ष आधे हिस्से को प्रदर्शित करता है। स्क्रॉलवाई सेट करना इसे उस स्थान पर ले जाता है जहां मैं इसे चाहता हूं - केवल छवि के निचले हिस्से को प्रदर्शित करना।

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:orientation="horizontal" 
    android:gravity="center_horizontal"> 

    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:src="@drawable/default_icon" 
     android:scrollY="50dp" /> 

</LinearLayout> 

तो, मेरे उदाहरण से, यह केवल आइकन के नीचे आधा प्रदर्शित कर रहा है।

0

एक और बिटमैप बनाने के लिए छवि के शीर्ष पर जाने के लिए अपने ड्रॉबल को बिटमैप और फसल में कनवर्ट करें, फिर इसे अपने छवि दृश्य में प्रदर्शित करें।

// to convert drawable to bitmap 
Bitmap resource = BitmapFactory.decodeResource(context.getResources(), 
              R.drawable.your_resource); 
// to set width of bitmap to imageview's width if necessary, 
         int width = imageView.getMeasuredWidth(); 
// to crop the bitmap to specific width and height, 
          resource = Bitmap.createBitmap(resource, 0, 0, width, height); 
संबंधित मुद्दे