ক্যানভাস এবং সারফেস ধারণাটি বোঝা


114

আমি আঁকার প্রক্রিয়াটি বোঝার জন্য সংগ্রাম করছি SurfaceViewএবং তাই অ্যান্ড্রয়েডে ব্যবহৃত পুরো Surface/ Canvas/ Bitmapসিস্টেমে।

আমি সমস্ত নিবন্ধ এবং এপিআই ডকুমেন্টেশন পৃষ্ঠাগুলি পড়েছি, যা আমি অ্যান্ড্রয়েড-বিকাশকারীদের সাইটে, অ্যান্ড্রয়েড গ্রাফিক্সের কয়েকটি টিউটোরিয়াল, লুনারল্যান্ডার উত্স কোড এবং এই প্রশ্নটি সন্ধান করতে সক্ষম হয়েছি ।

দয়া করে আমাকে বলুন, এই বিবৃতিগুলির মধ্যে কোনটি সত্য, কোনটি নয় এবং কেন।

  1. Canvasএটির Bitmapসাথে তার নিজস্ব সংযুক্তি রয়েছে। Surfaceএটির Canvasসাথে তার নিজস্ব সংযুক্তি রয়েছে।
  2. সমস্ত Viewউইন্ডো একই ভাগ করে Surfaceএবং তাই একই ভাগ করে Canvas
  3. SurfaceViewএটি একটি সাবক্লাস View, যা অন্যের Viewসাবক্লাসের মতো নয় এবং Viewনিজেই এর Surfaceআঁকার নিজস্ব own

এছাড়াও একটি অতিরিক্ত প্রশ্ন রয়েছে:

  • Surfaceশ্রেণীর প্রয়োজন কেন , যদি ইতিমধ্যে Canvasবিটম্যাপ সহ উচ্চ-স্তরের অপারেশনগুলির জন্য থাকে। এমন কোনও পরিস্থিতির উদাহরণ দিন যেখানে Canvasকাজ Surfaceকরতে উপযুক্ত নয় এমনটি করতে পারে।

2
গ্রাফিক্স আর্কিটেকচার ডক: উত্স.অ্যান্ড্রয়েড
ডিভাইস

উত্তর:


223

এখানে কিছু সংজ্ঞা দেওয়া হল:

  • একটি সারফেস হ'ল পিক্সেল ধারণ করে এমন একটি বস্তু যা স্ক্রিনে সংমিশ্রিত হচ্ছে। আপনি স্ক্রিনে প্রতিটি উইন্ডো দেখতে পাবেন (একটি কথোপকথন, আপনার পূর্ণ-স্ক্রিনের ক্রিয়াকলাপ, স্ট্যাটাস বার) এর নিজস্ব পৃষ্ঠ রয়েছে যা এটি আঁকবে এবং সারফেস ফ্লিঞ্জার এগুলিকে তাদের সঠিক জেড-অর্ডে চূড়ান্ত প্রদর্শন করে। ডাবল-বাফার রেন্ডারিং করতে সাধারণত একটি পৃষ্ঠের একাধিক বাফার থাকে (সাধারণত দুটি): অ্যাপ্লিকেশনটি শেষের বাফারটি ব্যবহার করে স্ক্রিনটি কমপোজিশনের সময় অ্যাপ্লিকেশনটি তার পরবর্তী ইউআই অবস্থায় আঁকতে পারে, যখন অ্যাপ্লিকেশনটি শেষ হওয়ার অপেক্ষা না করে finish অঙ্কন।

  • উইন্ডোটি মূলত ডেস্কটপের উইন্ডোটির মতোই। এটিতে একটি একক সারফেস রয়েছে যাতে উইন্ডোটির সামগ্রীগুলি রেন্ডার করা হয়। উইন্ডো তৈরি করতে একটি অ্যাপ্লিকেশন উইন্ডো ম্যানেজারের সাথে যোগাযোগ করে; উইন্ডো ম্যানেজার প্রতিটি উইন্ডোটির জন্য একটি সারফেস তৈরি করে এবং এটি আঁকার জন্য অ্যাপ্লিকেশনটিকে দেয়। অ্যাপ্লিকেশনটি সারফেসে যা খুশি তা আঁকতে পারে; উইন্ডো ম্যানেজারের কাছে এটি কেবল একটি অস্বচ্ছ আয়তক্ষেত্র।

  • একটি ভিউ একটি উইন্ডোর অভ্যন্তরে ইন্টারেক্টিভ UI উপাদান। একটি উইন্ডোতে এটির সাথে একক দৃশ্যের শ্রেণিবিন্যাস সংযুক্ত থাকে, যা উইন্ডোর সমস্ত আচরণ সরবরাহ করে। যখনই উইন্ডোটি পুনরায় চিত্রিত করা দরকার (যেমন একটি ভিউ নিজেই অকার্যকর করেছে), এটি উইন্ডোটির সারফেসে করা হয়। সারফেসটি লক করা আছে, এটি একটি ক্যানভাসকে ফেরত দেয় যা এটি আঁকতে ব্যবহার করতে পারে। প্রতিটি অঙ্কের ইউআই এর অংশটি আঁকতে ক্যানভাসকে নীচে হস্তান্তর করে একটি অঙ্কন ট্রভারসাল করা হয়। একবার হয়ে গেলে, সারফেসটি আনলক করা এবং পোস্ট করা হয় যাতে ডান টানা বাফারটিকে অগ্রভাগে স্যুপফেস করা যায় এবং তারপরে পৃষ্ঠের ফ্ল্যাঞ্জার দ্বারা স্ক্রিনে মিশ্রিত করা যায়।

  • একটি সারফেসভিউ ভিউর একটি বিশেষ বাস্তবায়ন যা অ্যাপ্লিকেশনটিকে সরাসরি আঁকানোর জন্য তার নিজস্ব ডেডিকেটেড সারফেস তৈরি করে (সাধারণ দর্শনের স্তরক্রমের বাইরে, যা অন্যথায় উইন্ডোটির জন্য একক সারফেসটি ভাগ করতে হবে)। এটি যেভাবে কাজ করে তা আপনি প্রত্যাশার চেয়ে সহজতর - সমস্ত সারফেসভিউ উইন্ডো ম্যানেজারকে একটি নতুন উইন্ডো তৈরি করতে বলবে, জেড-অর্ডারকে জানালাটি সারফেসভিউয়ের উইন্ডোর সামনের দিকে বা সামনের দিকে বলা এবং এটির সাথে মিলিয়ে দেওয়ার জন্য অবস্থিত যেখানে সুরফেসভিউটি ধারণকারী উইন্ডোতে উপস্থিত হয়। যদি পৃষ্ঠটি মূল উইন্ডোর পিছনে স্থাপন করা হয় (জেড ক্রমে), সারফেসভিউও মূল উইন্ডোর অংশটি স্বচ্ছতার সাথে পূরণ করে যাতে পৃষ্ঠটি দেখা যায়।

  • একটি বিটম্যাপ হ'ল কিছু পিক্সেল ডেটার একটি ইন্টারফেস। পিক্সেলগুলি বিটম্যাপ নিজেই বরাদ্দ করতে পারে যখন আপনি সরাসরি একটি তৈরি করছেন, বা এটি পিক্সেলগুলিতে ইঙ্গিত করতে পারে যা এটির নিজস্ব নয় যেমন অভ্যন্তরীণভাবে কোনও ক্যানভাসকে কোনও পৃষ্ঠায় অঙ্কনের জন্য আঁকতে দেখা দেয়। (একটি বিটম্যাপ তৈরি করা হবে এবং পৃষ্ঠের বর্তমান অঙ্কন বাফারের দিকে নির্দেশ করা হবে))

এছাড়াও দয়া করে মনে রাখবেন যে, এর দ্বারা বোঝা যায় যে একটি সারফেসভিউ হ'ল একটি ভারী ওজনযুক্ত বস্তু। আপনার যদি কোনও নির্দিষ্ট ইউআইতে একাধিক সারফেসভিউ থাকে তবে থামুন এবং এটি সত্যই প্রয়োজন কিনা তা নিয়ে ভাবেন। আপনার যদি দু'জনের বেশি থাকে তবে আপনার কাছে অবশ্যই অনেক বেশি।


আপনাকে অনেক ধন্যবাদ! উত্তর বিষয়গুলিকে আরও পরিষ্কার করে দিয়েছে। যদিও সারফেসে ক্যানভাসকে হুক করার বিষয়ে অংশটি অস্পষ্ট। এই ধরনের অপারেশন কোথায় প্রয়োজন তা ভাবতে পারছি না। পরবর্তী সেই অপারেশনের উদাহরণ হতে পারে: লকক্যানভাস () পদ্ধতিতে সারফেসহোল্ডার থেকে অর্জিত ক্যানভাসে বিটম্যাপ অঙ্কন?
fyodorananiev

1
এভাবেই অঙ্কনটি ঘটে ক্যানভাস হ'ল 2 ডি আঁকার এপিআই। আপনি যদি কোনও পৃষ্ঠের দিকে o আঁকতে চলেছেন তবে আপনাকে একটি ক্যানভাস তৈরি করতে হবে যা এটির জন্য আঁকতে ক্যানভাস 2 ডি অঙ্কন API ব্যবহার করতে তার বাফারটিকে নির্দেশ করবে।
হ্যাকবড

6
#hackbod'sউত্তর ছাড়াও , SurfaceViewগৌণ থ্রেড থেকেও রেন্ডার করা যেতে পারে যা Viewবস্তুর পক্ষে সম্ভব নয়
মোহনরাজ বালাসুব্রামণিয়াম

47

উইন্ডো, সারফেস, ক্যানভাস এবং বিটম্যাপের একটি ধারণাগত ওভারভিউ

উইন্ডো, সারফেস, ক্যানভাস এবং বিটম্যাপের মধ্যে কীভাবে মিথস্ক্রিয়া ঘটে তা সম্পর্কে একটি খুব প্রাথমিক এবং সাধারণ ধারণা ধারণা রয়েছে।
কখনও কখনও, একটি চাক্ষুষ প্রতিনিধিত্ব বাঁকা ধারণা বুঝতে অনেক সাহায্য করে helps
আমি আশা করি এই গ্রাফিকটি কাউকে সাহায্য করতে পারে।


4
ভিজ্যুয়াল চিত্রগুলি পাঠ্যের চেয়ে ভাল: ডি
মাভে ň

18

একটি বিটম্যাপটি কেবল পিক্সেল সংগ্রহের জন্য একটি মোড়ক। এটিকে কিছু অন্যান্য সুবিধাজনক ফাংশন সহ পিক্সেলের অ্যারে হিসাবে ভাবেন।

ক্যানভাসটি কেবল ক্লাস যা সমস্ত অঙ্কন পদ্ধতি রয়েছে। আপনি যদি এর সাথে পরিচিত হন তবে এটি এডাব্লুটি / সুইংয়ের গ্রাফিক্স ক্লাসের মতো similar কীভাবে একটি বৃত্ত আঁকবেন বা একটি বাক্স ইত্যাদির সমস্ত যুক্তি ক্যানভাসের মধ্যে রয়েছে। একটি ক্যানভাস বিটম্যাপ বা একটি খোলা জিএল ধারকটিতে আঁকায় তবে ভবিষ্যতে এটি অন্য ধরণের রেস্টারদের দিকে আকর্ষণ করার জন্য কেন বাড়ানোর কোনও কারণ নেই।

সারফেসভিউ এমন একটি ভিউ যা একটি সারফেস ধারণ করে। একটি পৃষ্ঠ একটি বিটম্যাপের অনুরূপ (এটিতে একটি পিক্সেল স্টোর রয়েছে)। এটি কীভাবে বাস্তবায়ন করা হয় তা আমি জানি না তবে আমি কল্পনা করব যে এটি এক ধরণের বিটম্যাপ মোড়কযুক্ত জিনিস যা অতিরিক্তভাবে পর্দার প্রদর্শনগুলির সাথে সম্পর্কিত (যা কোনও পৃষ্ঠের কারণ, একটি বিটম্যাপ খুব জেনেরিক) for আপনি আপনার সারফেস থেকে একটি ক্যানভাস পেতে পারেন যা সত্যিকার অর্থে অন্তর্নিহিত বিটম্যাপের সাথে সম্পর্কিত ক্যানভাস পাচ্ছে।

তোমার প্রশ্নগুলো.

1. ক্যানভাসের সাথে এর নিজস্ব বিটম্যাপ সংযুক্ত রয়েছে। পৃষ্ঠের সাথে এটির নিজস্ব ক্যানভাস যুক্ত রয়েছে।

হ্যাঁ, একটি ক্যানভাস বিটম্যাপে (বা একটি খোলা জিএল প্যানেল) কাজ করে। সারফেস আপনাকে এমন একটি ক্যানভাস দেয় যা সারফেস তার বিটম্যাপ স্টাইলের পিক্সেল স্টোরের জন্য যা ব্যবহার করছে তা পরিচালনা করে।

2. সমস্ত উইন্ডোটির উইন্ডো একই পৃষ্ঠতল ভাগ করে এবং এইভাবে একই ক্যানভাসটি ভাগ করে দেয়।

না। আপনি যতটা পৃষ্ঠতলের মত দেখতে চান।

৩.সুরফেসভিউ হল ভিউর সাবক্লাস, যা অন্যান্য ভিউর সাবক্লাসের থেকে আলাদা এবং নিজেই দেখুন এর আঁকার জন্য নিজস্ব পৃষ্ঠ রয়েছে has

হ্যাঁ. ঠিক যেমন তালিকাভিউ ভিউর একটি সাবক্লাস যা এর নিজস্ব তালিকা ডেটা কাঠামো আছে। ভিউয়ের প্রতিটি সাবক্লাস আলাদা কিছু করে।


1
সুতরাং, Bitmapএবং Surfaceকেবল পিক্সেল স্টোরের বিভিন্ন প্রজাতি এবং সেগুলির কোনওটি Canvasমোড়ানো যায়?
ফায়োডোরানিয়েভ

2
হ্যাঁ হ্যাঁ ক্যানভাস কোনও পৃষ্ঠে লিখতে না পারে, এটি পৃষ্ঠতলের নিজস্ব পিক্সেল স্টোর হিসাবে যা ব্যবহার করছে তা চালিত করে (অ্যান্ড্রয়েড উত্সের দিকে না তাকিয়ে আমি এটি কী তা নিশ্চিত করে বলতে পারি না)। এটি সম্ভবত একরকম বিটম্যাপ এক্সটেনশান যেহেতু ক্যানভাস কেবল বিটম্যাপ এবং জিএল এর জন্য কনস্ট্রাক্টর সরবরাহ করে।
স্ক্যাসমুয়েল

দুর্দান্ত সাহায্য, আপনাকে ধন্যবাদ! উত্তর সম্পর্কে সম্পর্কে 2. আমার প্রশ্নে আমি মানক দৃষ্টিভঙ্গি বোঝাই, সারফেসভিউগুলি নয়। ধরুন আমার প্রচুর ক্ষেত্র এবং বোতামের সাথে রিলেটিভলআউট আছে। সেক্ষেত্রে সারফেসটি কি পুরো উইন্ডোতে সংযুক্ত থাকে এবং শ্রেণিবিন্যাসের সমস্ত দর্শন দ্বারা ভাগ করা হয়?
ফায়োডোরানানিভ

1
মনে রাখবেন সারফেসটি কেবল পিক্সেলের সংকলন। সুতরাং প্রতিটি পৃষ্ঠের ভিউটির নিজস্ব পৃষ্ঠ রয়েছে এবং প্রতিটি পর্দার ভিন্ন অংশে রেন্ডার করা যায়। পুরো স্ক্রিন গেমটিতে গ্রাফিক্স রেন্ডার করার জন্য তাদের পর্দা পূরণ করার প্রয়োজন নেই (যদিও এটি সাধারণ ব্যবহার।
স্ক্যাসমুয়েল

1
আমি বিটম্যাপ এবং সারফেসকে সমতুল্য মনে করব না। একটি সারফেস হ'ল একটি অবজেক্ট যা জানালার কম্পোজিটার, পৃষ্ঠের ফ্লিনিংয়ের সম্পর্কে জানে। এটি হ'ল এটি স্ক্রিনে প্রত্যক্ষভাবে দৃশ্যমান, এর স্ক্রিনে জেড-অর্ডার ইত্যাদি রয়েছে
হ্যাকবড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.