วิธีที่ง่ายที่สุดในการใช้ SVG ใน Android?


165

ฉันพบไลบรารี่มากมายเพื่อใช้ svg ใน Android และหลีกเลี่ยงการสร้างความละเอียดที่แตกต่างและการวางไฟล์สำหรับแต่ละความละเอียดซึ่งน่ารำคาญมากเมื่อแอพนี้มีไอคอนหรือรูปภาพจำนวนมาก

ใคร ๆ ก็สามารถให้ขั้นตอนการใช้ไลบรารีที่ง่ายที่สุดสำหรับการใช้ SVG ใน Android ได้ฉันมั่นใจว่านี่จะช่วยคนอื่น ๆ ได้เช่นกัน

นอกจากนี้ฉันยังใช้ Android Studio และ Illustrator เพื่อสร้างไอคอนและรูปภาพของฉัน



วิดีโอสั้น ๆ เกี่ยวกับวิธีนำเข้า svg ใน android studio: youtube.com/watch?v=8e3I-PYJNHg
Zohab Ali

คำตอบ:


337

ก่อนอื่นคุณต้องนำเข้าsvgไฟล์โดยทำตามขั้นตอนง่าย ๆ

  1. คลิกขวาที่ drawable
  2. คลิกใหม่
  3. เลือกสินทรัพย์เวกเตอร์

หากภาพมีอยู่ในคอมพิวเตอร์ของคุณให้เลือกsvgไฟล์ในเครื่อง หลังจากนั้นให้เลือกเส้นทางของรูปภาพและตัวเลือกในการเปลี่ยนขนาดของรูปภาพที่มีอยู่ที่ด้านขวาของกล่องโต้ตอบหากคุณต้องการ ด้วยวิธีนี้svgภาพจะถูกนำเข้าในโครงการของคุณหลังจากนั้นสำหรับการใช้ภาพนี้ใช้ขั้นตอนเดียวกัน

@drawable/yourimagename

5
คำตอบสั้น ๆ และมีประโยชน์โดยไม่ต้องปวดหัวเมื่อคุณนำเข้าไฟล์ svg ภายนอกไปยังโปรเจ็กต์
CodeToLife

2
สิ่งที่ฉันกำลังมองหา :)
Mohamed Nageh

5
Nextปุ่มถูกปิดใช้งานเสมอ ความคิดใด ๆ ว่าทำไม?
mrid

ดังนั้นเราจะเปลี่ยนสีของ svg ได้อย่างไร
Oniya Daniel

ทำงานเหมือนจับใจ ดี!
sud007

19

อัปเดต: อย่าใช้คำตอบเก่านี้ดีกว่าใช้สิ่งนี้: https://stackoverflow.com/a/39266840/4031815

ตกลงหลังจากการวิจัยเป็นเวลาหลายชั่วโมงฉันพบว่าsvg-androidนั้นใช้งานง่ายมากดังนั้นฉันจึงออกจากคำแนะนำทีละขั้นตอน:

  1. ดาวน์โหลด lib จาก: https://code.google.com/p/svg-android/downloads/list เวอร์ชันล่าสุดในขณะที่เขียนนี่คือ:svg-android-1.1.jar

  2. ใส่ขวดในlibdir

  3. บันทึกไฟล์ * .svg ของคุณในres/drawabledir (ในผู้วาดภาพประกอบเป็นเรื่องง่ายเหมือนการกดบันทึกเป็นและเลือก svg)

  4. โค้ดต่อไปนี้ในกิจกรรมของคุณโดยใช้ไลบรารี svg:

    ImageView imageView = (ImageView) findViewById(R.id.imgView);
    SVG svg = SVGParser.getSVGFromResource(getResources(), R.drawable.example);
    //The following is needed because of image accelaration in some devices such as samsung
    imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    imageView.setImageDrawable(svg.createPictureDrawable());



คุณสามารถลดรหัสสำเร็จรูปได้ดังนี้

ง่ายมากฉันทำคลาสง่าย ๆ เพื่อให้มีรหัสที่ผ่านมาและลดรหัสสำเร็จรูปเช่นนี้:

import android.app.Activity;
import android.view.View;
import android.widget.ImageView;

import com.larvalabs.svgandroid.SVG;
import com.larvalabs.svgandroid.SVGParser;

public class SvgImage {

    private static ImageView imageView;
    private Activity activity;
    private SVG svg;
    private int xmlLayoutId;
    private int drawableId;


    public SvgImage(Activity activity, int layoutId, int drawableId) {
        imageView = (ImageView) activity.findViewById(layoutId);
        svg = SVGParser.getSVGFromResource(activity.getResources(), drawableId);
        //Needed because of image accelaration in some devices such as samsung
        imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        imageView.setImageDrawable(svg.createPictureDrawable());
    }
}

ตอนนี้ฉันสามารถเรียกมันได้ในกิจกรรม:

    SvgImage rainSVG = new SvgImage(MainActivity.this, R.id.rainImageView, R.drawable.rain);
    SvgImage thunderSVG = new SvgImage(MainActivity.this, R.id.thunderImageView, R.drawable.thunder);
    SvgImage oceanSVG = new SvgImage(MainActivity.this, R.id.oceanImageView, R.drawable.ocean);
    SvgImage fireSVG = new SvgImage(MainActivity.this, R.id.fireImageView, R.drawable.fire);
    SvgImage windSVG = new SvgImage(MainActivity.this, R.id.windImageView,R.drawable.wind);
    SvgImage universeSVG = new SvgImage(MainActivity.this, R.id.universeImageView,R.drawable.universe);

3
คุณควรพิจารณาการทำเครื่องหมายคำตอบของคุณเองให้เป็นที่ยอมรับแทนคำตอบก่อนหน้านี้
Cliff Burton

1
เมื่อฉันพยายามเพิ่มไฟล์ SVG ที่ฉันได้รับแจ้งว่าเกิดข้อผิดพลาดข้อผิดพลาด: ชื่อไฟล์จะต้องลงท้ายด้วย. xml หรือ. png
Sujay UN

1
เป็นเพราะเหตุใดimageView static? ฉันเห็นธงข้อผิดพลาดแดงที่นี่ SvgImage rainSVG = new SvgImage(MainActivity.this, R.id.rainImageView, R.drawable.rain); SvgImage thunderSVG = new SvgImage(MainActivity.this, R.id.thunderImageView, R.drawable.thunder); rainSVG อ้างอิงมี thunderImageView
DSchmidt

@ DSchmidt ที่เป็นเพียงตัวชี้ไปยัง imageview ถ้าเป็นรหัสของฉันฉันจะทำให้ทั้งคลาสคงที่ด้วยวิธีการหนึ่งที่เรียกว่า LoadSVG และอย่างที่คุณเห็นไม่มีจุดโหลดข้อมูลไปยังตัวแปรส่วนตัวที่ไม่สามารถเข้าถึงได้
Nasreddine Galfout



3

ลองใช้ปลั๊กอิน SVG2VectorDrawable ไปที่การตั้งค่า -> ปลั๊กอิน -> เรียกดูปลั๊กอินและติดตั้ง SVG2VectorDrawable เหมาะสำหรับการแปลงไฟล์ sag ไปเป็น vector drawable เมื่อคุณติดตั้งแล้วคุณจะพบไอคอนสำหรับสิ่งนี้ในส่วนแถบเครื่องมือทางด้านขวาของไอคอนความช่วยเหลือ (?)


ใช้งานไม่ได้สำหรับฉัน - เส้นทางไฟล์ SVG ไม่ได้อัปโหลดไปยังปลั๊กอิน คำตอบที่ดีที่สุดข้างต้นนั้นง่ายกว่ามากและทำงานให้สำเร็จลุล่วง
DaveNOTDavid

ปลั๊กอินที่ยอดเยี่ยม - แปลง svg จำนวนมากเป็น drawable เวกเตอร์ได้อย่างรวดเร็ว!
Morten Holmgaard

2
  1. คุณต้องแปลง SVG เป็น XML เพื่อใช้ในโครงการ Android

1.1 คุณสามารถทำได้กับเว็บไซต์นี้: http://inloop.github.io/svg2android/ แต่มันไม่รองรับคุณสมบัติทั้งหมดของ SVG เช่นการไล่ระดับสี

1.2 คุณสามารถแปลงผ่าน android studio แต่อาจใช้คุณสมบัติบางอย่างที่รองรับเฉพาะ API 24 และสูงกว่าที่ทำให้แอปของคุณเสียหายในอุปกรณ์รุ่นเก่า

และเพิ่มvectorDrawables.useSupportLibrary = trueไฟล์ gradle และใช้ดังนี้:

<android.support.v7.widget.AppCompatImageView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:srcCompat="@drawable/ic_item1" />
  1. ใช้ไลบรารีนี้https://github.com/MegatronKing/SVG-Android ที่รองรับคุณสมบัติเหล่านี้: https://github.com/MegatronKing/SVG-Android/blob/master/support_doc.md

เพิ่มรหัสนี้ในคลาสแอปพลิเคชัน:

public void onCreate() {
    SVGLoader.load(this)
}

และใช้ SVG ดังนี้:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_android_red"/>

ทำไมต้องใช้ตัวโหลด SVG เมื่อคุณมีวิธีการตรงไปตรงมาของ @ Pallavi มีข้อได้เปรียบในการใช้งานโหลดเดอร์หรือไม่?
Taslim Oseni

@Taslim คุณสมบัติที่รองรับเป็นมากกว่าวิธีปกติ คุณสามารถดูคุณสมบัติที่รองรับและดู
sajad abbasi

0

1) คลิกขวาที่ไดเรกทอรีที่ดึงได้จากนั้นไปที่ใหม่จากนั้นไปที่เวกเตอร์เนื้อหา 2) เปลี่ยนประเภทสินทรัพย์จากภาพตัดปะเป็นท้องถิ่น 3) เรียกดูไฟล์ของคุณ 4) ให้ขนาดไฟล์ 5) ให้ขนาด 5) จากนั้นคลิกถัดไป ไดเรกทอรี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.