এক্সএমএল সংজ্ঞা ব্যবহার করে ত্রিভুজ আকার তৈরি?


133

এমন কোনও উপায় আছে যে আমি এক্সএমএল ফাইলে ত্রিভুজ আকারটি নির্দিষ্ট করতে পারি?

<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 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
আমি দুঃখিত .. তবে সমক্ষেত্রের ত্রিভুজ কখনই একটি সঠিক কোণ ত্রিভুজ হতে পারে না।
lilbyrdie

3
@ জেসেকমিলিউস্কি - অনেক অনেক ধন্যবাদ! আপনার পিভটএক্স / পিভোটওয়াই প্যারামিটারগুলি ডাউন তীরের জন্য কী ভাগ করা যায়? বাম? রাইট?
জনিলম্বদা 23

2
এটিকে ঘোরানোর জন্য আমি আবর্তনটি এক্সএমএল ফাইলে পরিবর্তন করি, ত্রিভুজ সংজ্ঞায় নয় in
জেসেক মাইলিউস্কি

1
-1। এটা ভাল না। দৃশ্যটির আসল মাত্রাগুলি বড় হয় তারপরে স্ক্রিনে কী প্রদর্শিত হয়। এটি সীমানা মোড়ানো উচিত ছিল।
জাভানেটর

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

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

আপনি এখানে আরও বিকল্প পেতে পারেন ।


3
আপনি কীভাবে এই এক্সএমএলে এই মানটি রাখবেন?
ব্যবহারকারী531069

2
এই টেক্সটভিউটি অনুলিপি করুন এবং এটি আপনার এক্সএমএল
এলহানান মিশ্রকি

6
@ ব্যবহারকারী531069: এটি আপনার <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>

এখানে চিত্র বর্ণনা লিখুন


আপনাকে ধন্যবাদ, আমি সত্যই জানি না যে এই ভেক্টরগুলি কীভাবে কাজ করে। আমার ফলাফলটি দরকার
হোসেইন শাহদুস্ট

আমি কীভাবে এই ত্রিভুজগুলির আকার বাড়াতে এবং হ্রাস করতে পারি? উচ্চতা এবং প্রস্থ উল্লেখ করে, এটি কাজ করে না
আয়ুশি

46

আপনি ভেক্টর ড্রয়াবল ব্যবহার করতে পারেন ।

যদি আপনার ন্যূনতম এপিআই 21 এর চেয়ে কম হয়, অ্যান্ড্রয়েড স্টুডিওগুলি স্বয়ংক্রিয়ভাবে বিল্ড সময় সেই কম সংস্করণগুলির জন্য পিএনজি বিটম্যাপ তৈরি করে ( ভেক্টর অ্যাসেট স্টুডিও দেখুন )। আপনি যদি সমর্থন লাইব্রেরি ব্যবহার করেন তবে অ্যান্ড্রয়েড এমনকি "সত্যিকারের ভেক্টরগুলি" এপিআই 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>

এখানে চিত্র বর্ণনা লিখুন

ভিউ লেআউট_উইথ / লেআউট_উইট বৈশিষ্ট্যগুলি সেট করে ত্রিভুজটির আকার (প্রস্থ / উচ্চতা) পরিবর্তন করুন। আপনি যদি গণিতটি সঠিক করেন তবে আপনি একতরফা ত্রিভুজও পেতে পারেন।

আপডেট 25.11.2017

যদি আপনি সমর্থন লাইব্রেরি ব্যবহার করেন তবে আপনি সত্যিকারের ভেক্টরগুলি (বিটম্যাপ তৈরির পরিবর্তে) এপিআই as এর মতো ব্যবহার করতে পারেন । কেবল যুক্ত করুন:

vectorDrawables.useSupportLibrary = true

আপনার কি defaultConfigআপনার মডিউল এর build.gradle হবে।

তারপরে (ভেক্টর এক্সএমএল) এর মতো অঙ্কনযোগ্য সেট করুন:

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

ভেক্টর অ্যাসেট স্টুডিও পৃষ্ঠাতে সবকিছু খুব সুন্দরভাবে নথিভুক্ত করা হয় ।

এই বৈশিষ্ট্যটি থেকে আমি আইকনগুলির ক্ষেত্রে বিটম্যাপ ছাড়াই পুরোপুরি কাজ করছি। এটিও APK আকারকে কিছুটা হ্রাস করে।


1
একটি লিঙ্ক পোস্ট করুন এবং কেউ আপনার জন্য এটি আপলোড করবে :-)
গ্যাব্রিয়েল ওশিরো

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.TriangleShapeView ... />
কাজ করেছে

ওটা দারুন. আমি কীভাবে ত্রিভুজটির রঙ পরিবর্তন করতে পারি। প্রাথমিক রঙ ধূসর বর্ণবাদী বলে তবে অন টিচ বা অনক্লিকের উপর লাল হয়ে যায়?
Fshamri

এই XML- এর হ্যাক চেয়ে ভাল উপায় হল
dorsz

@ পিটার হাই আপনি কি আমাকে ছোট উন্নতি করতে সাহায্য করতে পারেন? গোল করার জন্য আমার উপরের ডানদিকে দরকার corner আমি কীভাবে এটি অর্জন করতে পারি?
বার্তেরিও

1
আমি কীভাবে ত্রিভুজের ভিতরে পাঠ্য যুক্ত করব?
সাকিবয়

38

তারিখে Jacek Milewski সমাধান আমার জন্য কাজ করে এবং তার সমাধান উপর ভিত্তি করে, আপনি যদি প্রয়োজন এবং inversed ত্রিভুজ আপনি এই ব্যবহার করতে পারেন:

<?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 এইভাবে আপনি একতরফা ত্রিভুজ পেতে পারবেন না। এবং যাইহোক, এটির প্রচুর সম্ভাব্য সমস্যাগুলি হচ্ছে ie stackoverflow.com/questions/20805826/...
j_kubik


11

আমি এক্সএমএল ব্যবহার না করে আপনাকে সাহায্য করতে পারি ?


কেবল,

কাস্টম লেআউট (স্লাইস):

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
ভিউগ্রুপ থেকে প্রাপ্ত ক্লাসগুলিতে অনড্রব কল করা হবে না, ডিফল্ট হবে না। আপনাকে হয় সেটউইলনটড্রাও (ভুয়া) দ্বারা অঙ্কন সক্ষম করতে হবে বা পরিবর্তে কোনও ভিউ থেকে উত্তরাধিকারী হতে হবে।
ব্লাগো

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: একটি অঙ্কনীয় এক্সএমএল ফাইল তৈরি করুন, আপনার আঁকানো এক্সএমএলে নিম্নলিখিত এক্সএমএল সামগ্রীটি অনুলিপি করুন এবং আটকান। (দয়া করে অবগত হোন যে আপনি আপনার আঁকতে সক্ষম এক্সএমএল ফাইলের জন্য যে কোনও নাম ব্যবহার করতে পারেন my

<?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 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>

এক্সএমএল ডিজাইনটি কাস্টমাইজ করার সম্পূর্ণ যুক্তি রয়েছে 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

আমি এটি কখনও করি নি, তবে আমি যা বুঝতে পেরেছি সেগুলি থেকে আপনি প্যাথ শেপ শ্রেণিটি ব্যবহার করতে পারেন: http://developer.android.com/references/android/ographicics/drawable/shapes/PathShape.html


2
এক্সএমএলে পথের আকৃতিটি কীভাবে ব্যবহার করবেন?
সেবাস্তিয়ান রথ

এটি সঠিক অংশটি ব্যবহারের জন্য সন্ধানের জন্য সহায়ক ছিল, তবে কীভাবে এটি ব্যবহার করবেন সে সম্পর্কে প্রায় পর্যাপ্ত ব্যাখ্যা সরবরাহ করে না। যাইহোক, ধন্যবাদ।
নাভেরার

দুঃখিত সেবাস্তিয়ান এবং নাহার ... আমি আমার উত্তরে ইঙ্গিত দিয়েছি যে আমি এটি কখনও ব্যবহার করি নি, সুতরাং কীভাবে এটি ব্যবহার করবেন সে সম্পর্কে আমি নিশ্চিত নই। এটি কেবল ক্লাসের মতো মনে হয় যা কাজটি করবে। যদিও এটির জন্য পর্যাপ্ত নথিপত্র নেই তা আমি সম্মত।
জাস্টিন

3
পাথশেপটির সাথে সম্পর্কিত কোনও এক্সএমএল সিনট্যাক্স রয়েছে বলে মনে হয় না। এক্সএমএল শেপ-ট্যাগ কেবল আয়তক্ষেত্র, ডিম্বাকৃতি, লাইন এবং রিংকে সমর্থন করে। বিকাশকারী.অ্যান্ড্রয়েড
গাইড

3

আমি পার্টি করতে দেরি করেছি এবং আমি একই সমস্যার মুখোমুখি হয়েছি এবং গুগল আমাকে প্রথম ফলাফল হিসাবে এই স্ট্যাকওভারফ্লো থ্রেডে দেখিয়েছে।

আমি ত্রিভুজ যুক্ত করার জন্য এবং এক্সএমএল পদ্ধতির মাধ্যমে ত্রিভুজ আকারটি প্রদর্শিত হওয়ার চেয়ে বেশি জায়গা নিচ্ছে এমন কোনও সমস্যা খুঁজে বের করার জন্য এক্সএমএল উপায়টি ব্যবহার করার চেষ্টা করেছি।

লেআউট সীমানা সহ স্ক্রিন শট দেখুন

এখানে চিত্র বর্ণনা লিখুন

সুতরাং এই কাস্টম ভিউ ক্লাসটি শেষ করে যা নিম্নলিখিত যে কোনও একটির ত্রিভুজ আঁকতে পারে: -

  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>

আমি জানি ওপি এক্সএমএল সমাধানগুলিতে সমাধান চায় তবে আমি এক্সএমএল পদ্ধতির সাথে সমস্যাটি চিহ্নিত করেছি। আমি আশা করি এটি কারও সাহায্য করবে।


2

জেসেক মাইলিউস্কির সমাধানটি ব্যবহার করে আমি একটি স্বচ্ছ পটভূমি সহ একটি ওরিয়েন্টেড ডাউন এঙ্গেল তৈরি করেছি।

<?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"
    />

এখানে চিত্র বর্ণনা লিখুন

প্যারামিটারগুলি চিত্রের আকারের উপর নির্ভর করে। উদাহরণস্বরূপ, যদি ImageView100dp * 80dp এর আকার থাকে তবে আপনার এই ধ্রুবকগুলি ব্যবহার করা উচিত:

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

এখানে চিত্র বর্ণনা লিখুন


2

আমি অ্যান্ড্রয়েড নেভিগেশন বারের ব্যাক বোতামের মতো ত্রিভুজ চিত্রটি তৈরি করার চেষ্টা করি তবে আমি কোনও সমাধান পাইনি।

এখন, আমি সমাধানটি নিজের সাথে খুঁজে পেয়েছি এবং এটি ভাগ করে নিতে চাই।

ত্রিভুজ নেভিগেশন বার অ্যান্ড্রয়েড

নীচে এক্সএমএল ব্যবহার করুন

<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 এইভাবে আপনি একতরফা ত্রিভুজ পেতে পারবেন না। এবং যাইহোক, এটির প্রচুর সম্ভাব্য সমস্যাগুলি হচ্ছে ie stackoverflow.com/questions/20805826/...
j_kubik

0

গুগল এখানে সমতুল্য ত্রিভুজ সরবরাহ করে ।
আকারটি নমনীয় যাতে ভেক্টরড্র্যাবেবল চয়ন করুন।
এটি প্লাগইন হিসাবে অ্যান্ড্রয়েড স্টুডিওতে একীভূত হয়েছে।

আপনি একটি SVG চিত্র থাকে, তাহলে আপনি ব্যবহার করতে পারেন এই এটা VectorDrawable খুব রূপান্তর করবে।

আপনার একবার ভেক্টরড্রেবলযোগ্য হয়ে গেলে, এর রঙ এবং আবর্তন পরিবর্তন করা অন্যদের মতোই সহজ like

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.