कैनवास छवि/ड्राइंग नहीं दिखा रहा है

मैं एसवीजी पथ और छवि पर एक काम कर रहा हूं। मैंने एसवीजी फ़ाइल लोड की है और एक छवि प्राप्त की है और कैनवास पर थीई छवि सेट करने का प्रयास करें। लेकिन कैनवास छवि नहीं दिखा रहा है। मैं इस छवि/चित्र की ऊंचाई और चौड़ाई और शून्य जांच की जांच करता हूं और यह शून्य नहीं है इसलिए मैं समझने में असमर्थ हूं कि कैनवास छवि क्यों नहीं दिखा रहा है। कोई मदद

मेरा कोड:

public class MainActivity extends Activity{

    Context c;


    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);




        c=getApplicationContext();
        setContentView(new GameView(this));
    }


    public class GameView extends View{
        private int width, height;

        private long svgId;

        Picture picture;

        long startTime;
        float scaleFactor;

        public GameView(Context context) {
            super(context);



            SVG svg = SVGParser.getSVGFromResource(getResources(),R.raw.android);
            picture = svg.getPicture();




        }



        @Override

        protected void onLayout (boolean changed, int left, int top, int right, int bottom) {

           //get visible area

            width = right - left;

            height = bottom - top;

        }



        @Override

        public void onDraw(Canvas canvas) {

           //paint a white background...

            canvas.drawColor(Color.BLACK);

            if (canvas!=null)
            {
                Toast.makeText(c, "yahooooooooooooooooo"+picture.getHeight(), Toast.LENGTH_LONG).show();

                scaleFactor=Math.min((float)getHeight()/picture.getHeight(),(float)getWidth()/picture.getWidth());
                canvas.scale((float)scaleFactor,(float)scaleFactor);
                canvas.drawPicture(picture);
            }

        }

    }
}
0
इसका परीक्षण करने के लिए आप किस डिवाइस/ओएस का उपयोग कर रहे हैं?
जोड़ा लेखक PearsonArtPhoto, स्रोत
@ सिमन ज़ेट्टरवॉल मैंने काले से लाल रंग की कोशिश की और यह लाल दिखा रहा है। लेकिन बात यह भी है कि मैं यह भी जांचता हूं कि मेरा एसवीजी शून्य है लेकिन यह "शून्य नहीं" दे रहा है और मैंने यह भी बताया कि मैं तस्वीर की ऊंचाई और चौड़ाई तक पहुंच सकता हूं। पेंट के बारे में मैंने इसे शामिल नहीं किया था
जोड़ा लेखक User42590, स्रोत
हाँ मैंने इसे ब्राउज़र में खोला है और यह एक छवि दिखा रहा है ..
जोड़ा लेखक User42590, स्रोत
जोड़ा लेखक User42590, स्रोत
क्या आप चैट में इस चर्चा को जारी रख सकते हैं?
जोड़ा लेखक User42590, स्रोत
क्या आप कृपया मुझे मार्गदर्शन कर सकते हैं कि मैं अवैध() कैसे कॉल कर सकता हूं ??
जोड़ा लेखक User42590, स्रोत
मैंने इसे कैनवास.draw चित्र (चित्र) की तरह बुलाया; अमान्य (); बट कुछ भी नहीं
जोड़ा लेखक User42590, स्रोत
मैं नोट 10.1 स्पैन पर अपने कोड का परीक्षण कर रहा हूं
जोड़ा लेखक User42590, स्रोत
बस अपने कार्यान्वयन का परीक्षण करने के लिए, canvas.drawColor (color.black) बदलें < canvas.drawColor (Color.RED); कहने के लिए। यदि यह काम करता है तो आपके एसवीजी के साथ कुछ गलत है। आपकी टिप्पणी भी कहती है कि आप इसे सफेद रंग देते हैं।
जोड़ा लेखक Simon Zettervall, स्रोत
बस जांचने के लिए, क्या आपने फ़ोटोशॉप के लिए एसवीजी खोला है और यह पुष्टि कर सकता है कि यह पारदर्शी या कुछ नहीं है?
जोड़ा लेखक Simon Zettervall, स्रोत
और आपकी छवि को "एंड्रॉइड" कहा जाता है?
जोड़ा लेखक Simon Zettervall, स्रोत
उदाहरण के लिए onResume() में अपने गेम व्यू पर अमान्य() को कॉल करें। ऐसा हो सकता है कि इसे आवंटित नहीं किया गया है या अभी तक कुछ नहीं किया गया है।
जोड़ा लेखक Simon Zettervall, स्रोत

2 उत्तर

Svg-android के साथ एक ज्ञात समस्या है कि कुछ छवियों के साथ, हार्डवेयर त्वरण वास्तव में छवि को प्रदर्शित नहीं कर सकता है। मैं इस कारण के सटीक परिस्थितियों के बारे में निश्चित नहीं हूं, लेकिन मुझे पता है कि यह मेरे साथ हुआ, जैसा कि मैंने इस प्रश्न में दस्तावेज़ किया है । कुंजी दृश्य के लिए हार्डवेयर त्वरण को अक्षम करना है। आपके लक्षित होने के आधार पर, आपको ऐसा कुछ करने की ज़रूरत नहीं है जैसा मैंने किया था (एंड्रॉइड 3.0+ को बिल्ड संस्करण की जांच करने की आवश्यकता नहीं है), लेकिन यहां मुख्य हिस्सा है। अपने कन्स्ट्रक्टर में कन्स्ट्रक्टर में शामिल कोड जोड़ें, फिर disabledHardwareAcceleration बिट जोड़ें

public GameView(Context context,AttributeSet attrs) {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
    {
        disableHardwareAcceleration();
    }
}

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void disableHardwareAcceleration()
{
    setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
0
जोड़ा

This is what I use to return a drawable object that I will use through all my app
It works quite well.

final BitmapDrawable getSVG_Drawable
    (int svgResourceID, int width, int height)
{
   //Get a Picture from the SVG in res/raw.
    final SVG vector =
        SVGParser.getSVGFromResource(getResources(), svgResourceID);

    final DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);

   //Redraw the picture to a new size.
    final Bitmap bmp =
        Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    final Canvas cnv = new Canvas(bmp);
    cnv.setDensity((int) (metrics.xdpi));

    cnv.drawPicture(vector.getPicture(), new Rect(0, 0, width, height));
    final BitmapDrawable drw = new BitmapDrawable(getResources(), bmp);

   //Return the drawable.
    return drw;
}
0
जोड़ा
धन्यवाद, आप बहुत बहुत धन्यवाद
जोड़ा लेखक User42590, स्रोत
आपका सुझाव काम कर रहा है
जोड़ा लेखक User42590, स्रोत
मुझे खुशी है कि इससे मदद मिली। मैं इसे सफलतापूर्वक उपयोग कर रहा हूं, इसलिए मैंने सोचा कि यह आपके लिए भी काम करेगा।
जोड़ा लेखक Kling Klang, स्रोत