Xml परिभाषाओं का उपयोग करके एक त्रिभुज आकार बनाना?


133

वहाँ एक रास्ता है कि मैं एक xml फ़ाइल में एक त्रिकोण आकार निर्दिष्ट कर सकता है?

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="triangle">
  <stroke android:width="1dip" android:color="#FFF" />
  <solid android:color="#FFF" />
</shape>

क्या हम एक पथ आकार या कुछ के साथ ऐसा कर सकते हैं? मुझे सिर्फ एक समबाहु त्रिभुज की आवश्यकता है।

धन्यवाद


क्या आपको एक समाधान मिला? मुझे भी यही तकलीफ़ है।
माइक बेव्ज़

ऐसा लगता है कि उस व्यक्ति के लिए काम किया है जिसने मार्गदर्शन लिखा है (और कुछ टिप्पणीकार): एंड्रॉइड: ड्रा
इक्विलिटल ट्रायंगल शेप्स

जवाबों:


166

में इस पोस्ट मैं इसे कैसे करना है का वर्णन। और यहाँ XML को परिभाषित करने वाला त्रिकोण है:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <rotate
            android:fromDegrees="45"
            android:toDegrees="45"
            android:pivotX="-40%"
            android:pivotY="87%" >
            <shape
                android:shape="rectangle" >
                <stroke android:color="@color/transparent" android:width="10dp"/>
                <solid
                    android:color="@color/your_color_here" />
            </shape>
        </rotate>
    </item>
</layer-list>

अगर कुछ अस्पष्ट है या आपको स्पष्टीकरण की आवश्यकता है कि यह कैसे बनाया गया है, तो मेरी पोस्ट देखें। यह एक कटआउट आयत घुमाया जाता है :) यह बहुत ही स्मार्ट और अच्छी तरह से काम कर रहा समाधान है।

संपादित करें: जैसे तीर इंगित करने के लिए -> उपयोग:

...
android:fromDegrees="45"
android:toDegrees="45"
android:pivotX="13%"
android:pivotY="-40%" >
...

और तीर को इंगित करने के लिए <- उपयोग:

android:fromDegrees="45"
android:toDegrees="45"
android:pivotX="87%"
android:pivotY="140%" >

3
मुझे क्षमा करें .. लेकिन एक समबाहु त्रिभुज कभी भी समकोण त्रिभुज नहीं हो सकता है।
19

3
@JacekMilewski - बहुत बहुत धन्यवाद! एक डाउन एरो के लिए अपने पिवटएक्स / पिवटी पैरामीटर को साझा करने की देखभाल करें? बाएं? सही?
जॉनीलम्बदा

2
इसे घुमाने के लिए मैं रोटेशन को लेआउट xml फ़ाइल में बदलता हूं, त्रिकोण परिभाषा में ही नहीं।
जेक मिलवस्की

1
-1। यह अच्छा नहीं है। दृश्य का वास्तविक आयाम बड़ा है तो स्क्रीन पर क्या दिखाई देता है। यह सीमा से लिपटा होना चाहिए था।
जवनाटर

1
क्या आप कृपया साझा कर सकते हैं कि आपने अपने मूल्यों को डिडग्रीस, टॉडग्रीस, पिवेटएक्स, और पिवेटी से कैसे प्राप्त किया? मेरे पास एक उपयोग का मामला है जहां लेआउट फ़ाइल में रोटेशन को बदलना संभव नहीं है।
पैट्रिक ब्रेनन

82
<TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="▼"/>

आप यहां अधिक विकल्प प्राप्त कर सकते हैं ।


3
आप उस मान को xml में कैसे डालते हैं?
user531069

2
इस
TextView

6
@ user531069: इसे अपने <string name="bottom_arrow">&#9660;</string>

1
मुझे लिंक से अलग तीर चाहिए, मैं कॉपी करता हूं और पेस्ट करता हूं & # 129032; पाठ के रूप में, यह कुछ अज्ञात चरित्र को दर्शाता है। ?
एम। उस्मान खान

2
यह समाधान पाठ दृश्य के अंदर फ़ॉन्ट पैडिंग से निपटने की एक नई समस्या पैदा करता है।
बजे सलमान खाकवानी

59

आप vectorइस तरह त्रिभुज बनाने के लिए उपयोग कर सकते हैं

ic_triangle_right.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:pathData="M0,12l0,12 11.5,-5.7c6.3,-3.2 11.5,-6 11.5,-6.3 0,-0.3 -5.2,-3.1 -11.5,-6.3l-11.5,-5.7 0,12z"
        android:strokeColor="#00000000"
        android:fillColor="#000000"/>
</vector>

फिर इसका उपयोग करें

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@drawable/ic_triangle_right"
    />

रंग और दिशा बदलने के लिए, का उपयोग करें android:tintऔरandroid:rotation

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@drawable/ic_triangle_right"
    android:rotation="180" // change direction
    android:tint="#00f" // change color
    />

परिणाम

यहाँ छवि विवरण दर्ज करें

वेक्टर के आकार को बदलने के लिए, आप वेक्टर की चौड़ाई / ऊँचाई को बदल सकते हैं। उदाहरण परिवर्तन चौड़ाई 10dp करने के लिए

<vector 
        android:width="10dp"
        android:height="24dp"
        >
       ...
</vector>

यहाँ छवि विवरण दर्ज करें


धन्यवाद, मैं वास्तव में नहीं जानता कि ये वैक्टर कैसे काम करते हैं। मुझे परिणाम की आवश्यकता थी
होसैन शाहदोस्त

मैं इन त्रिभुजों के आकार को कैसे बढ़ा और घटा सकता हूँ? ऊंचाई और चौड़ाई निर्दिष्ट करके, यह काम नहीं करता है
Aayushi

46

आप वेक्टर ड्रॉबल्स का उपयोग कर सकते हैं ।

यदि आपका न्यूनतम एपीआई 21 से कम है, तो निर्माण समय में उन निचले संस्करणों के लिए Android Studio स्वचालित रूप से PNG बिटमैप बनाता है ( वेक्टर संपत्ति स्टूडियो देखें) )। यदि आप समर्थन लाइब्रेरी का उपयोग करते हैं, तो एंड्रॉइड यहां तक ​​कि एपीआई 7 के नीचे "वास्तविक वैक्टर" का प्रबंधन करता है (इस पोस्ट के अपडेट में नीचे की तरफ अधिक)।

एक लाल ऊपर की ओर इशारा करते हुए त्रिकोण होगा:

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="100dp"
    android:width="100dp"
    android:viewportHeight="100"
    android:viewportWidth="100" >
    <group
        android:name="triableGroup">
        <path
            android:name="triangle"
            android:fillColor="#FF0000"
            android:pathData="m 50,0 l 50,100 -100,0 z" />
    </group>
</vector>

यदि आप त्रिकोण को घुमाते हैं, तो इसे अपने लेआउट में जोड़ें और क्लिपचाइल्ड = "गलत" सेट करना याद रखें।

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false">

    <ImageView
        android:layout_width="130dp"
        android:layout_height="100dp"
        android:rotation="0"
        android:layout_centerInParent="true"
        android:background="@drawable/triangle"/>

</RelativeLayout>

यहाँ छवि विवरण दर्ज करें

व्यू लेआउट_ एक्सपोज़र / लेआउट_हाइट विशेषताओं को सेट करके त्रिकोण का आकार (चौड़ाई / ऊँचाई) बदलें। यदि आप गणित सही करते हैं तो इस तरह से आप एक eqilateral त्रिकोण भी प्राप्त कर सकते हैं।

UPDATE 25.11.2017

यदि आप समर्थन पुस्तकालय का उपयोग करते हैं, तो आप वास्तविक वैक्टर (यदि बिटमैप निर्माण) का उपयोग कर सकते हैं जितना कि एपीआई 7 । बस जोड़ें:

vectorDrawables.useSupportLibrary = true

अपना करो defaultConfigअपने मॉड्यूल के build.gradle में अपना ।

फिर (वेक्टर xml) को इस तरह खींचने योग्य सेट करें:

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    app:srcCompat="@drawable/triangle" />

सब कुछ वेक्टर एसेट स्टूडियो पृष्ठ पर बहुत अच्छी तरह से प्रलेखित है ।

जब से मैं इस फीचर को आइकनों के संदर्भ में पूरी तरह से बिटमैप्स के बिना काम कर रहा हूं। इससे एपीके का साइज भी काफी कम हो जाता है।


1
एक लिंक पोस्ट करें और कोई इसे आपके लिए अपलोड करेगा :-)
GabrielOshiro

1
+1 vectorDrawables.useSupportLibrary = trueमें अतिरिक्त लाभ है कि आप परिभाषित रंगों का उपयोग कर सकते हैं colors.xml, क्योंकि बिटमैप निर्माण के दौरान बनाए जाते हैं (जब परिभाषित रंग उपलब्ध नहीं होते हैं)।
रोब

39

मैं निश्चित रूप से इस मामले में एक दृश्य लागू करने के लिए जाना जाएगा:

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;

public class TriangleShapeView extends View {

    public TriangleShapeView(Context context) {
        super(context);
    }

    public TriangleShapeView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public TriangleShapeView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int w = getWidth() / 2;

        Path path = new Path();
        path.moveTo( w, 0);
        path.lineTo( 2 * w , 0);
        path.lineTo( 2 * w , w);
        path.lineTo( w , 0);
        path.close();

        Paint p = new Paint();
        p.setColor( Color.RED );

        canvas.drawPath(path, p);
    }
}

अपने लेआउट में इसका उपयोग इस प्रकार करें:

<TriangleShapeView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff487fff">
</TriangleShapeView>

इस कार्यान्वयन का उपयोग करने से आपको निम्नलिखित परिणाम प्राप्त होंगे:

यहाँ छवि विवरण दर्ज करें


<com.your.path.to.view.riangleShapeView ... />
काम किया

यह बहुत बढ़िया बात है। मैं त्रिभुज रंग कैसे बदल सकता हूँ। प्रारंभिक रंग ग्रे है, लेकिन ऑनटच या ऑनक्लिक पर लाल रंग में बदल जाता है?
फशमरी

यह xml में हैक की तुलना में बेहतर है
dorsz

@ पेटर हाय। क्या आप मुझे छोटे सुधार में मदद कर सकते हैं? मुझे गोलाकार होने के लिए ऊपरी दाएं कोने की आवश्यकता है। मैं इसे कैसे प्राप्त कर सकता हूं?
बार्टरियो

1
मैं त्रिभुज के अंदर पाठ कैसे जोड़ूंगा?
सकीबॉय

38

जेसेक मिल्वाइस्की समाधान मेरे लिए काम करता है और, उनके समाधान के आधार पर, यदि आपको आवश्यकता है और उलटा त्रिकोण है तो आप इसका उपयोग कर सकते हैं:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <rotate
            android:fromDegrees="45"
            android:toDegrees="45"
            android:pivotX="135%" 
            android:pivotY="15%">
            <shape android:shape="rectangle">    
                <solid android:color="@color/aquamarine" />
            </shape>
        </rotate>
    </item>
</layer-list>

-1 इस तरह आप एकतरफा त्रिकोण प्राप्त नहीं कर सकते। और वैसे भी, यह संभावित समस्याओं का बहुत हो रहा है। stackoverflow.com/questions/20805826/…
j_kubik


11

क्या मैं XML का उपयोग किए बिना आपकी मदद कर सकता हूं ?


सीधे शब्दों में,

कस्टम लेआउट (टुकड़ा):

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.View;

public class Slice extends View {

    Paint mPaint;

    Path mPath;

    public enum Direction {
        NORTH, SOUTH, EAST, WEST
    }

    public Slice(Context context) {
        super(context);
        create();
    }

    public Slice(Context context, AttributeSet attrs) {
        super(context, attrs);
        create();
    }

    public void setColor(int color) {
        mPaint.setColor(color);
        invalidate();
    }

    private void create() {
        mPaint = new Paint();
        mPaint.setStyle(Style.FILL);
        mPaint.setColor(Color.RED);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        mPath = calculate(Direction.SOUTH);
        canvas.drawPath(mPath, mPaint);
    }

    private Path calculate(Direction direction) {
        Point p1 = new Point();
        p1.x = 0;
        p1.y = 0;

        Point p2 = null, p3 = null;

        int width = getWidth();

        if (direction == Direction.NORTH) {
            p2 = new Point(p1.x + width, p1.y);
            p3 = new Point(p1.x + (width / 2), p1.y - width);
        } else if (direction == Direction.SOUTH) {
            p2 = new Point(p1.x + width, p1.y);
            p3 = new Point(p1.x + (width / 2), p1.y + width);
        } else if (direction == Direction.EAST) {
            p2 = new Point(p1.x, p1.y + width);
            p3 = new Point(p1.x - width, p1.y + (width / 2));
        } else if (direction == Direction.WEST) {
            p2 = new Point(p1.x, p1.y + width);
            p3 = new Point(p1.x + width, p1.y + (width / 2));
        }

        Path path = new Path();
        path.moveTo(p1.x, p1.y);
        path.lineTo(p2.x, p2.y);
        path.lineTo(p3.x, p3.y);

        return path;
    }
}

आपकी गतिविधि (उदाहरण):

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;

public class Layout extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Slice mySlice = new Slice(getApplicationContext());
        mySlice.setBackgroundColor(Color.WHITE);
        setContentView(mySlice, new LinearLayout.LayoutParams(
                LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    }
}

काम करने का उदाहरण:

यहाँ छवि विवरण दर्ज करें


एक और बिल्कुल सरल Calculateकार्य आप में रुचि हो सकती है ..

private Path Calculate(Point A, Point B, Point C) {
    Path Pencil = new Path();
    Pencil.moveTo(A.x, A.y);
    Pencil.lineTo(B.x, B.y);
    Pencil.lineTo(C.x, C.y);
    return Pencil;
}

11
+1 हाँ, आप कर सकते हैं। और धन्यवाद। ओपी के अलावा और भी लोग हैं जो समाधान की तलाश कर रहे हैं जो एक्सएमएल के लिए विशेष रूप से नहीं पूछ रहे हैं - जैसे मैं
हूं

1
onDraw को उन वर्गों पर नहीं बुलाया जाएगा जो ViewGroup से प्राप्त होते हैं, डिफ़ॉल्ट नहीं होते हैं। आपको या तो setWillNotDraw (झूठा) द्वारा ड्राइंग को सक्षम करना होगा या इसके बजाय किसी व्यू से इनहेरिट करना होगा।
ब्लागो

11

वेक्टर दराज का उपयोग करना:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
   android:width="24dp"
   android:height="24dp"
   android:viewportWidth="24.0"
   android:viewportHeight="24.0">
   <path
        android:pathData="M0,0 L24,0 L0,24 z"
        android:strokeColor="@color/color"
        android:fillColor="@color/color"/>
</vector>

यहाँ छवि विवरण दर्ज करें


का उपयोग कर Lऔर zअंत में मेरी समस्या तय की, धन्यवाद!
ऑक्सीड

6

उन लोगों के लिए जो एक सही त्रिकोण तीर चाहते हैं, यहां आप जाते हैं:

चरण 1: एक ड्रा करने योग्य XML फ़ाइल बनाएं, अपने एक्सएमएल एक्सएमएल में निम्नलिखित एक्सएमएल सामग्री को कॉपी और पेस्ट करें। (कृपया सूचित किया जाए कि आप अपनी ड्रा करने योग्य XML फ़ाइल के लिए किसी भी नाम का उपयोग कर सकते हैं। मेरे मामले के लिए, मैं इसे "v_right_nrown" नाम देता हूं)

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item >
        <rotate
            android:fromDegrees="45"
            android:toDegrees="-45"
            android:pivotX="15%"
            android:pivotY="-36%" >
            <shape
                android:shape="rectangle"  >
                <stroke android:color="@android:color/transparent" android:width="1dp"/>
                <solid
                    android:color="#000000"  />
            </shape>
        </rotate>
    </item>
</layer-list>

चरण 2: अपने लेआउट के एक्सएमएल में, एक दृश्य बनाएं और अपनी पृष्ठभूमि को आकर्षित करने योग्य एक्सएमएल में बांधें जो आपने अभी एसटीईपी 1 में बनाया है । मेरे मामले के लिए, मैं अपने दृश्य की पृष्ठभूमि संपत्ति में v_right_arrow को बांधता हूं।

<View
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:background="@drawable/v_right_arrow">
</View>

नमूना उत्पादन:

यहाँ छवि विवरण दर्ज करें

उम्मीद है कि इससे मदद करेगी, सुसंयोग!


6

आप xml का उपयोग करके पृष्ठभूमि में निम्नलिखित त्रिकोण जोड़ सकते हैं

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="100dp"
    android:width="100dp"
    android:viewportHeight="100"
    android:viewportWidth="100" >
    <group
        android:name="triableGroup">
        <path
            android:name="triangle"
            android:fillColor="#848af8"
            android:pathData="M 0,20 L 0,0 L 100,0 L 100,20 L 54,55  l -1,0.6  l -1,0.4  l -1,0.2  l -1,0   l -1,-0  l -1,-0.2  l -1,-0.4  l -1,-0.6    L 46,55   L 0,20 -100,-100 Z" />
    </group>
</vector>

Xml डिजाइन को अनुकूलित करने के लिए पूरा तर्क है pathData। (0,0) के रूप में शीर्ष-बाएँ पर विचार करें और अपनी आवश्यकता के अनुसार लेआउट डिज़ाइन करें। इस उत्तर की जाँच करें


4
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <rotate
            android:fromDegrees="45"
            android:toDegrees="45"
            android:pivotX="-40%"
            android:pivotY="87%" >
            <shape
                android:shape="rectangle" >
                <stroke android:color="@android:color/transparent" android:width="0dp"/>
                <solid
                    android:color="#fff" />
            </shape>
        </rotate>
    </item>
</layer-list>

4
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <rotate
                android:fromDegrees="45"
                android:pivotX="135%"
                android:pivotY="1%"
                android:toDegrees="45">
                <shape android:shape="rectangle">
                    <stroke
                        android:width="-60dp"
                        android:color="@android:color/transparent" />
                    <solid android:color="@color/orange" />
                </shape>
            </rotate>
        </item>
    </layer-list>

3

मैंने ऐसा कभी नहीं किया है, लेकिन जो मैं समझता हूं कि आप PathShape वर्ग का उपयोग कर सकते हैं: http://developer.android.com/reference/android/graphics/drawable/shapes/PathShape.html


2
XML में पथ आकार का उपयोग कैसे करें?
सेबेस्टियन रोथ

यह उपयोग करने के लिए सही भाग खोजने के लिए सहायक था, लेकिन इसका उपयोग कैसे करें, इस पर लगभग पर्याप्त विवरण नहीं दिया गया है। वैसे भी धन्यवाद, हालांकि।
नवआर

क्षमा करें सेबस्टियन और नवरे ... मैंने अपने जवाब में संकेत दिया कि मैंने कभी इसका उपयोग नहीं किया है, इसलिए मुझे यकीन नहीं है कि इसका उपयोग करने के बारे में कैसे जाना जाए। यह सिर्फ उस वर्ग की तरह लगता है जिसे काम मिल जाएगा। मैं सहमत हूँ कि इसके लिए पर्याप्त दस्तावेज नहीं है।
जस्टिन

3
PathShape में संबंधित XML सिंटैक्स नहीं है। XML शेप-टैग केवल आयत, अंडाकार, लाइन और रिंग का समर्थन करता है। डेवलपर
.android.com

3

मुझे पार्टी करने में देर हो रही है और मैं एक ही समस्या में आया था और Google ने मुझे पहली परिणाम के रूप में इस StackOverflow धागे की ओर इशारा किया।

मैंने त्रिकोण को जोड़ने के लिए xml तरीके का उपयोग करने की कोशिश की और एक समस्या का पता लगाया कि xml दृष्टिकोण के माध्यम से त्रिकोण का आकार दिखाई देने की तुलना में अधिक जगह ले रहा है।

लेआउट सीमा के साथ स्क्रीन शॉट देखें

यहाँ छवि विवरण दर्ज करें

तो इस कस्टम व्यू क्लास को बनाना जो निम्न में से किसी भी प्रकार के त्रिभुज को आकर्षित कर सकता है: -

  1. इशारा करते हुए
  2. इशारा करते हुए
  3. इशारा करते हुए छोड़ दिया
  4. सही इशारा

के रूप में

package com.hiteshsahu.materialupvotewidget;    
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.annotation.NonNull;
import android.util.AttributeSet;
import android.view.View;

public class TriangleShapeView extends View {

    private int colorCode = Color.DKGRAY;

    public int getColorCode() {
        return colorCode;
    }

    public void setColorCode(int colorCode) {
        this.colorCode = colorCode;
    }

    public TriangleShapeView(Context context) {
        super(context);
        if (isInEditMode())
            return;
    }

    public TriangleShapeView(Context context, AttributeSet attrs) {
        super(context, attrs);
        if (isInEditMode())
            return;
    }

    public TriangleShapeView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        if (isInEditMode())
            return;
    }


    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int w = getWidth() / 2;
        int h = getHeight() / 2;

        //Choose what type of triangle you want here
        Path path = getLeftTriangle(w, h);

        path.close();
        Paint p = new Paint();
        p.setColor(colorCode);
        p.setAntiAlias(true);

        canvas.drawPath(path, p);
    }

    @NonNull
    /**
     * Return Path for down facing triangle
     */
    private Path getInvertedTriangle(int w, int h) {
        Path path = new Path();
        path.moveTo(0, 0);
        path.lineTo(w, 2 * h);
        path.lineTo(2 * w, 0);
        path.lineTo(0, 0);
        return path;
    }

    @NonNull
    /**
     * Return Path for Up facing triangle
     */
    private Path getUpTriangle(int w, int h) {
        Path path = new Path();
        path.moveTo(0, 2 * h);
        path.lineTo(w, 0);
        path.lineTo(2 * w, 2 * h);
        path.lineTo(0, 2 * h);
        return path;
    }

    @NonNull
    /**
     * Return Path for Right pointing triangle
     */
    private Path getRightTriangle(int w, int h) {
        Path path = new Path();
        path.moveTo(0, 0);
        path.lineTo(2 * w, h);
        path.lineTo(0, 2 * h);
        path.lineTo(0, 0);
        return path;
    }

    @NonNull
    /**
     * Return Path for Left pointing triangle
     */
    private Path getLeftTriangle(int w, int h) {
        Path path = new Path();
        path.moveTo(2 * w, 0);
        path.lineTo(0, h);
        path.lineTo(2 * w, 2 * h);
        path.lineTo(2 * w, 0);
        return path;
    }
}

आप बस इसे इस तरह से xml लेआउट में उपयोग कर सकते हैं

 <com.hiteshsahu.materialupvote.TriangleShapeView
            android:layout_width="50dp"
            android:layout_height="50dp"></com.hiteshsahu.materialupvote.TriangleShapeView>

मुझे पता है कि ओपी को xml समाधान में समाधान चाहिए लेकिन जैसा कि मैंने xml दृष्टिकोण के साथ समस्या को इंगित किया है। मुझे आशा है कि यह किसी की मदद कर सकता है।


2

Jacek Milewski के समाधान का उपयोग करके मैंने एक पारदर्शी पृष्ठभूमि के साथ एक उन्मुख डाउन एंगल बनाया।

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <rotate
            android:fromDegrees="135"
            android:pivotX="65%"
            android:pivotY="20%"
            android:toDegrees="135"
            >
            <shape android:shape="rectangle">
                <stroke
                    android:width="1dp"
                    android:color="@color/blue"
                    />
                <solid android:color="@color/transparent" />
            </shape>
        </rotate>
    </item>
</layer-list>

आप कोण को बदल सकते हैं android:pivotXऔर android:pivotYस्थानांतरित कर सकते हैं ।

उपयोग:

<ImageView
    android:layout_width="10dp"
    android:layout_height="10dp"
    android:src="@drawable/ic_angle_down"
    />

यहाँ छवि विवरण दर्ज करें

पैरामीटर छवि के आकार पर निर्भर करते हैं। उदाहरण के लिए, यदि ImageViewआकार 100dp * 80dp है, तो आपको इन स्थिरांक का उपयोग करना चाहिए:

<rotate
    android:fromDegrees="135"
    android:pivotX="64.5%"
    android:pivotY="19%"
    android:toDegrees="135"
    >

यहाँ छवि विवरण दर्ज करें


2

मैं एंड्रॉइड नेविगेशन बार के बैक बटन की तरह त्रिकोण छवि बनाने की कोशिश करता हूं, लेकिन मुझे कोई समाधान नहीं मिला है।

अब, मुझे इसका हल मिल गया और मैं इसे साझा करना चाहूंगा।

त्रिकोण नेविगेशन बार Android

नीचे xml का उपयोग करें

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:bottom="20dp"
    android:left="480dp"
    android:right="60dp"
    android:top="20dp">
    <shape>
        <size android:width="60dp" />
        <corners android:radius="80dp"/>
        <solid android:color="#AAA" />
    </shape>
</item>
<item
    android:bottom="480dp"
    android:right="70dp"
    android:top="20dp">
    <rotate
        android:fromDegrees="-28"
        android:pivotX="96%"
        android:pivotY="50%"
        android:toDegrees="-20">
        <shape>
            <corners android:radius="80dp"/>
            <size android:height="60dp" />
            <solid android:color="#AAA" />
        </shape>
    </rotate>
</item>

<item
    android:bottom="20dp"
    android:right="70dp"
    android:top="480dp">
    <rotate
        android:fromDegrees="28"
        android:pivotX="96%"
        android:pivotY="50%"
        android:toDegrees="-20">
        <shape>
            <corners android:radius="80dp"/>
            <size android:height="60dp" />
            <solid android:color="#AAA" />
        </shape>
    </rotate>
</item>


0
  <LinearLayout
        android:id="@+id/ly_fill_color_shape"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_gravity="center"
        android:background="@drawable/shape_triangle"
        android:gravity="center"
        android:orientation="horizontal" >
    </LinearLayout>

<item>
    <rotate
        android:fromDegrees="45"
        android:pivotX="-15%"
        android:pivotY="77%"
        android:toDegrees="45" >
        <shape android:shape="rectangle" >
            <stroke
                android:width="2dp"
                android:color="@color/black_color" />

            <solid android:color="@color/white" />

            <padding android:left="1dp" />
        </shape>
    </rotate>
</item>
<item android:top="200dp">
    <shape android:shape="line" >
        <stroke
            android:width="1dp"
            android:color="@color/black_color" />

        <solid android:color="@color/white" /> 
    </shape>
</item>


-1 इस तरह आप एकतरफा त्रिकोण प्राप्त नहीं कर सकते। और वैसे भी, यह संभावित समस्याओं का बहुत हो रहा है। stackoverflow.com/questions/20805826/…
j_kubik

0

Google यहां एक समबाहु त्रिभुज प्रदान करता है
वेक्टरड्राएबल चुनें ताकि आकार लचीला हो।
यह प्लगइन के रूप में Android स्टूडियो में एकीकृत है।

आप एक एसवीजी छवि है, तो आप उपयोग कर सकते हैं इस यह VectorDrawable को भी परिवर्तित करने के लिए।

एक बार आपके पास वेक्टरड्राइव होने के बाद, इसका रंग बदलना और घूमना आसान होता है, जैसा कि दूसरों ने उल्लेख किया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.