অ্যান্ড্রয়েডে আমি কীভাবে বিন্দু / ড্যাশযুক্ত লাইন তৈরি করব?


254

আমি একটি বিন্দু লাইন তৈরি করার চেষ্টা করছি। আমি এখনই একটি শক্ত রেখার জন্য এটি ব্যবহার করছি:

LinearLayout divider = new LinearLayout( this );
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, 2 );
divider.setLayoutParams( params );
divider.setBackgroundColor( getResources().getColor( R.color.grey ) );

আমার এর মতো কিছু দরকার তবে শক্তের পরিবর্তে বিন্দুযুক্ত। আমি স্বচ্ছ লেআউট এবং শক্ত বিন্যাসের মধ্যে বিকল্প কয়েকশ লেআউট তৈরি করা এড়াতে চাই।

উত্তর:


515

জাভা কোড ব্যতীত:

অঙ্কনযোগ্য / dotted.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line">

    <stroke
       android:color="#C7B299"
       android:dashWidth="10px"
       android:dashGap="10px"
       android:width="1dp"/>
</shape>

view.xml:

<ImageView
    android:layout_width="match_parent"
    android:layout_height="5dp"
    android:src="@drawable/dotted"
    android:layerType="software" />

21
আমি যদি বুঝতে পারি না আমি কেন আমার ফোনে ফাঁক ছাড়াই একটি লাইন পাচ্ছি, যখন আমি গ্রহনের গ্রাফিকাল লেআউটে ফাঁক দেখছি।
দান্তে

73
কিছু মনে করবেন না, আমি পেয়েছি এখানে সমাধান: stackoverflow.com/questions/10843402/... সফ্টওয়্যার শুধু সেট স্তর প্রকার: অ্যান্ড্রয়েড layerType = "সফ্টওয়্যার"
দান্তে

7
একটা হল পরিচিত বাগ যখন ব্যবহার canvas.drawLine()। হার্ডওয়্যার ত্বরণ অক্ষম করার বিকল্প হিসাবে, আপনি canvas.drawPathপরিবর্তে ব্যবহার করতে পারেন ।
hgoebl

10
dp পরিবর্তে ব্যবহার করুন px
এস এম_এমামিয়ান

7
যাচাই করেছে যে এটি Android 6.0.1 এবং 4.4.4 উভয় ক্ষেত্রেই কাজ করে। দুটি বিষয় লক্ষণীয়: ১) আপনার সত্যিকারের একটি চিত্র ভিউ প্রয়োজন, ব্যাকগ্রাউন্ড এটি না করায় অঙ্কনযোগ্য একটি ভিউ; 2) android:layerType="software"অবশ্যই চিত্রভিউতে সেট করা উচিত।
জোনিক

206

পেইন্ট ইফেক্টটি পেইন্ট অবজেক্টে সেট করা আছে

Paint fgPaintSel = new Paint();
fgPaintSel.setARGB(255, 0, 0,0);
fgPaintSel.setStyle(Style.STROKE);
fgPaintSel.setPathEffect(new DashPathEffect(new float[] {10,20}, 0));

আপনি ইনট [আরও বেশি সংখ্যক সরবরাহ করে] বিন্যাসে সমস্ত ধরণের বিন্যাস তৈরি করতে পারেন এটি ড্যাশ এবং ব্যবধানের অনুপাত নির্দিষ্ট করে। এটি একটি সাধারণ, সমানভাবে ড্যাশড, লাইন।


এটা এখন আমার জন্য কেন? stackoverflow.com/questions/12401311/...
Chris.Zou

কনস্ট্রাক্টরে নতুন ফ্লোট চেষ্টা করুন [] {5,10,15,20
সিলিকোনাগল

4
অ্যান্ড্রয়েড বিকাশে আমি কিছুটা নতুন। আমি জিজ্ঞাসা করতে চাই যে ড্যাশড এফেক্টযুক্ত পেইন্ট অবজেক্টটি কীভাবে আমি স্রেফ তৈরি করা রৈখিক বিন্যাসে যুক্ত করব?
ডিস্কজান

আমি এই কোডটি সরাসরি অনুলিপি করে আটকালাম, তবে কিছুই ঘটেনি। এটিকে কাজ করার জন্য আমার কি অতিরিক্ত কোড লেখা উচিত?
জেসন

50

এক্সএমএল ব্যবহার করে ডটেড লাইন তৈরি করা হচ্ছে।
অঙ্কনযোগ্য ফোল্ডারে এক্সএমএল তৈরি করুন এবং যে আইটেমটিতে আপনি বিন্দুযুক্ত সীমানা সেট করতে চান সেই ব্যাকগ্রাউন্ডটি দিন।

এক্সএমএল ব্যাকগ্রাউন্ড তৈরি করা হচ্ছে "ড্যাশড_র্ডার":

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape>
            <solid android:color="#ffffff" />
            <stroke
                android:dashGap="5dp"
                android:dashWidth="5dp"
                android:width="1dp"
                android:color="#0000FF" />
            <padding
                android:bottom="5dp"
                android:left="5dp"
                android:right="5dp"
                android:top="5dp" />
        </shape>
    </item>
</layer-list>

আইটেমটিতে সেই পটভূমি যুক্ত করা:

<Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/dashed_border"/>

আপনার যদি কোণগুলির জন্য ব্যাসার্ধের প্রয়োজন হয় তবে <corners android:radius="5dp" />কেবল নিজের আকারে যুক্ত করুন। আরও তথ্যের জন্য স্ট্যাকওভারফ্লো.com/a/41940609/1000551 দেখুন
ভাদিম কোতোভ

আমি মনে করি একক আইটেমের জন্য স্তর-তালিকা অপ্রয়োজনীয়। আমি <আকার >> কে মূল উপাদান হিসাবে ব্যবহার করেছি এবং এটি একইরকম কাজ করে।
বড়_মহলে

37

এক্সএমএল তৈরি করুন (দেখুন_লাইন_ডটেড.এক্সএমএল):

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:bottom="-1dp"
            android:left="-1dp"
            android:right="-1dp"
            android:top="0dp">

            <shape android:shape="rectangle">
                <stroke
                    android:width="1dp"
                    android:color="#ffff0017"
                    android:dashGap="3dp"
                    android:dashWidth="1dp" />

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

                <padding
                    android:bottom="10dp"
                    android:left="10dp"
                    android:right="10dp"
                    android:top="10dp" />
            </shape>
        </item>
</layer-list>

আপনার দেখার পটভূমি হিসাবে সেট করুন:

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@drawable/view_line_dotted" />

আপনি দয়া করে এটি ব্যাখ্যা করতে পারেন?
স্কাইওয়াল

1
ধন্যবাদ, সূত্রটি হ'ল <item android:bottom="-1dp" android:left="-1dp" android:right="-1dp" >, যদি আপনি একটি অনুভূমিক রেখা 1dp বেধ চান।
কুলমাইন্ড

অসাধারণ. প্রায় আমার জন্য বাক্স থেকে কাজ করে। আমার কেবলমাত্র পরিবর্তনটির দরকার ছিল স্ট্রোক ট্যাগ পরিবর্তন করা; 2 ডিপি প্রস্থ এবং 4 ডিপি ড্যাশগ্যাপ।
সুফিয়ান

এপিআই <21 সহ ডিভাইসগুলির android:layerType="software"জন্য একটি দর্শন যোগ করুন বা লিখুন view.setLayerType(View.LAYER_TYPE_SOFTWARE, null)( stackoverflow.com/questions/10843402/… দেখুন )।
কুলমাইন্ড

24

আমি একটি বিন্দুযুক্ত রেখা আঁকতে চাইলে আমি যা করেছি তা হ'ল অঙ্কনযোগ্য ড্যাশ_লাইন.এক্সএমএল সংজ্ঞায়িত করা :

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="line" >
<stroke
    android:dashGap="3dp"
    android:dashWidth="2dp"
    android:width="1dp"
    android:color="@color/black" />
</shape>

এবং তারপরে বিন্যাসে ড্যাশ_লাইন হিসাবে পটভূমির সাথে একটি দৃশ্যের সংজ্ঞা দিনঅ্যান্ড্রয়েড: স্তর টাইপ = "সফ্টওয়্যার" অন্তর্ভুক্ত করার জন্য নোট , অন্যথায় এটি কাজ করবে না।

<View
            android:layout_width="match_parent"
            android:layout_height="5dp"
            android:background="@drawable/dash_line"
            android:layerType="software" />

ধন্যবাদ বন্ধু! এই android:layerType="software"যে জিনিসটি আমি খুঁজছিলাম! চিয়ার্স!
টুচকা

20

আমার কাস্টম একটি ড্যাশলাইন রয়েছে যা অনুভূমিক ও ভার্চুয়াল ড্যাশ লাইন সমর্থন করে। নীচে কোড:

public class DashedLineView extends View
{
private float density;
private Paint paint;
private Path path;
private PathEffect effects;

public DashedLineView(Context context)
{
    super(context);
    init(context);
}

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

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

private void init(Context context)
{
    density = DisplayUtil.getDisplayDensity(context);
    paint = new Paint();
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(density * 4);
    //set your own color
    paint.setColor(context.getResources().getColor(R.color.XXX));
    path = new Path();
    //array is ON and OFF distances in px (4px line then 2px space)
    effects = new DashPathEffect(new float[] { 4, 2, 4, 2 }, 0);

}

@Override
protected void onDraw(Canvas canvas)
{
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    paint.setPathEffect(effects);
    int measuredHeight = getMeasuredHeight();
    int measuredWidth = getMeasuredWidth();
    if (measuredHeight <= measuredWidth)
    {
        // horizontal
        path.moveTo(0, 0);
        path.lineTo(measuredWidth, 0);
        canvas.drawPath(path, paint);
    }
    else
    {
        // vertical
        path.moveTo(0, 0);
        path.lineTo(0, measuredHeight);
        canvas.drawPath(path, paint);
    }

}
}

এই পদ্ধতিটি কি এক্সএমএল আকারের চেয়ে ভাল?
ইগোরগানাপলস্কি

পারফেক্ট! আমি যা খুঁজছিলাম
জব এম

9

এই শ্রেণিটি ব্যবহার করে আপনি একাধিক লাইনের পাঠ্যে "ড্যাশড এবং আন্ডারলাইন" প্রভাব প্রয়োগ করতে পারেন। ড্যাশপ্যাথএফেক্টটি ব্যবহার করতে আপনাকে আপনার টেক্সটভিউয়ের হার্ডওয়্যারঅ্যাক্সেসারেটেডটি বন্ধ করতে হবে (যদিও ড্যাশপ্যাথএফেক্ট পদ্ধতিতে দীর্ঘ পাঠ্যের ক্ষেত্রে সমস্যা রয়েছে)। আপনি আমার নমুনা প্রকল্পটি এখানে পেতে পারেন: https://github.com/jintoga/Dashed-Undlines-TextView/blob/master/Untitled.png

public class DashedUnderlineSpan implements LineBackgroundSpan, LineHeightSpan {

    private Paint paint;
    private TextView textView;
    private float offsetY;
    private float spacingExtra;

    public DashedUnderlineSpan(TextView textView, int color, float thickness, float dashPath,
                               float offsetY, float spacingExtra) {
        this.paint = new Paint();
        this.paint.setColor(color);
        this.paint.setStyle(Paint.Style.STROKE);
        this.paint.setPathEffect(new DashPathEffect(new float[] { dashPath, dashPath }, 0));
        this.paint.setStrokeWidth(thickness);
        this.textView = textView;
        this.offsetY = offsetY;
        this.spacingExtra = spacingExtra;
    }

    @Override
    public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int v,
                             Paint.FontMetricsInt fm) {
        fm.ascent -= spacingExtra;
        fm.top -= spacingExtra;
        fm.descent += spacingExtra;
        fm.bottom += spacingExtra;
    }

    @Override
    public void drawBackground(Canvas canvas, Paint p, int left, int right, int top, int baseline,
                               int bottom, CharSequence text, int start, int end, int lnum) {
        int lineNum = textView.getLineCount();
        for (int i = 0; i < lineNum; i++) {
            Layout layout = textView.getLayout();
            canvas.drawLine(layout.getLineLeft(i), layout.getLineBottom(i) - spacingExtra + offsetY,
                    layout.getLineRight(i), layout.getLineBottom(i) - spacingExtra + offsetY,
                    this.paint);
        }
    }
}

ফলাফল:

আন্ডারলাইন ড্যাশড


8

আপনি যদি উল্লম্ব লাইনটি সন্ধান করছেন তবে এই আঁকুন ব্যবহার করুন।

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="-8dp"
        android:bottom="-8dp"
        android:left="-8dp">
        <shape>
            <solid android:color="@android:color/transparent"/>
            <stroke
                android:width="4dp"
                android:color="#ffffff"
                android:dashGap="4dp"
                android:dashWidth="4dp"/>
        </shape>
    </item>
</layer-list>

নেতিবাচক শীর্ষ নীচের এবং বাম মানগুলি একটি ড্যাশযুক্ত রেখা রেখে আকৃতির অযাচিত দিকগুলি সরিয়ে দেয়।

এটি যেমন একটি দর্শন ব্যবহার করুন।

<View
android:layout_width="4dp"
android:layout_height="match_parent"
android:background="@drawable/dash_line_vertical"
android:layerType="software" />

4

আমি নীচে লেআউটটির পটভূমি হিসাবে ব্যবহার করেছি:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
<stroke
   android:width="1dp"
    android:dashWidth="10px"
   android:dashGap="10px"
    android:color="android:@color/black" 
   />
</shape>

android:shape="rectangle"লাইনের পরিবর্তে কেন ?
ইগোরগানাপলস্কি

4

আমি সম্পাদনা পাঠের জন্য ড্যাশড ডটেড লাইন তৈরি করেছি। আপনি এখানে যান। আপনার নতুন এক্সএমএল তৈরি করুন। উদাহরণস্বরূপ এখানে ড্যাশড_র্ডার.এক্সএমএল কোড:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:bottom="1dp"
    android:left="-2dp"
    android:right="-2dp"
    android:top="-2dp">
    <shape android:shape="rectangle">
        <stroke
            android:width="2dp"
            android:color="#000000"
            android:dashGap="3dp"
            android:dashWidth="1dp" />

        <solid android:color="#00FFFFFF" />

        <padding
            android:bottom="10dp"
            android:left="10dp"
            android:right="10dp"
            android:top="10dp" />
    </shape>
</item></layer-list>

এবং উদাহরণস্বরূপ আপনার সম্পাদনা পাঠ্যে আপনার নতুন এক্সএমএল ফাইলটি ব্যবহার করুন:

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/dashed_border"/>

চিয়ার্স! :)



3

ডটেড পটভূমি নিখুঁত কাজ করার জন্য সেরা সমাধান

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
  <stroke
    android:dashGap="3dp"
    android:dashWidth="2dp"
    android:width="1dp"
    android:color="@color/colorBlack" />
</shape>

3

ক্যানভাসে ডটেড এফেক্টের জন্য পেইন্ট অবজেক্টে এই বৈশিষ্ট্যটি সেট করুন:

paint.setPathEffect(new DashPathEffect(new float[] {0,30}, 0));

আপনার রেন্ডারটি আপনার উপযুক্ত অনুসারে 30 মান পরিবর্তন করুন: এটি প্রতিটি বিন্দুর মধ্যে "দূরত্ব" উপস্থাপন করে।

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


2

আমার পক্ষে কাজ করা একমাত্র জিনিস এবং আমি মনে করি এটি হ'ল সবচেয়ে সহজ উপায় হ'ল একটি পেইন্ট অবজেক্টের সাথে কোনও পাথ ব্যবহার করা:

    Paint paintDash = new Paint();
    paintDash.setARGB(255, 0, 0, 0);
    paintDash.setStyle(Paint.Style.STROKE);
    paintDash.setPathEffect(new DashPathEffect(new float[]{10f,10f}, 0));
    paintDash.setStrokeWidth(2);
    Path pathDashLine = new Path();

তারপরে অনড্র (): (আপনি যদি কলগুলিকে ওয়ানড্র কলগুলির মধ্যে পরিবর্তন করেন তবে গুরুত্বপূর্ণ কল রিসেট, পাথ সমস্ত গতিবিধি সংরক্ষণ করে)

    pathDashLine.reset();
    pathDashLine.moveTo(porigenX, porigenY);
    pathDashLine.lineTo(cursorX,cursorY);
    c.drawPath(pathDashLine, paintDash);

2

আমি রুইজ থেকে সমাধানটি পছন্দ করেছি , তবে এক্সএমএল থেকে আমার আরও নিয়ন্ত্রণের প্রয়োজন। সুতরাং আমি এটিকে পরিবর্তন করে কোটলিনে এবং বৈশিষ্ট্যগুলি যুক্ত করেছি।

1) কোটলিন শ্রেণীর অনুলিপি করুন:

import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.view.View

class DashedDividerView : View {
constructor(context: Context) : this(context, null, 0)
constructor(context: Context, attributeSet: AttributeSet) : this(context, attributeSet, 0)

companion object {
    const val DIRECTION_VERTICAL = 0
    const val DIRECTION_HORIZONTAL = 1
}

private var dGap = 5.25f
private var dWidth = 5.25f
private var dColor = Color.parseColor("#EE0606")
private var direction = DIRECTION_HORIZONTAL
private val paint = Paint()
private val path = Path()

constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
    context,
    attrs,
    defStyleAttr
) {
    val typedArray = context.obtainStyledAttributes(
        attrs,
        R.styleable.DashedDividerView,
        defStyleAttr,
        R.style.DashedDividerDefault
    )

    dGap = typedArray.getDimension(R.styleable.DashedDividerView_dividerDashGap, dGap)
    dWidth = typedArray.getDimension(R.styleable.DashedDividerView_dividerDashWidth, dWidth)
    dColor = typedArray.getColor(R.styleable.DashedDividerView_dividerDashColor, dColor)
    direction =
        typedArray.getInt(R.styleable.DashedDividerView_dividerDirection, DIRECTION_HORIZONTAL)

    paint.color = dColor
    paint.style = Paint.Style.STROKE
    paint.pathEffect = DashPathEffect(floatArrayOf(dWidth, dGap), 0f)
    paint.strokeWidth = dWidth

    typedArray.recycle()
}

override fun onDraw(canvas: Canvas) {
    super.onDraw(canvas)
    path.moveTo(0f, 0f)

    if (direction == DIRECTION_HORIZONTAL) {
        path.lineTo(measuredWidth.toFloat(), 0f)
    } else {
        path.lineTo(0f, measuredHeight.toFloat())
    }
    canvas.drawPath(path, paint)
}

}

2) / রেজ ডিরেক্টরিতে একটি অ্যাটর ফাইল তৈরি করুন এবং এটি যুক্ত করুন

 <declare-styleable name="DashedDividerView">
    <attr name="dividerDashGap" format="dimension" />
    <attr name="dividerDashWidth" format="dimension" />
    <attr name="dividerDashColor" format="reference|color" />
    <attr name="dividerDirection" format="enum">
        <enum name="vertical" value="0" />
        <enum name="horizontal" value="1" />
    </attr>
</declare-styleable>

3) স্টাইল ফাইল একটি শৈলী যুক্ত করুন

 <style name="DashedDividerDefault">
    <item name="dividerDashGap">2dp</item>
    <item name="dividerDashWidth">2dp</item>
    <!-- or any color -->
    <item name="dividerDashColor">#EE0606</item>
    <item name="dividerDirection">horizontal</item>
</style>

4) এখন আপনি ডিফল্ট স্টাইল ব্যবহার করতে পারেন

<!-- here will be your path to the class -->
<com.your.package.app.DashedDividerView
    android:layout_width="match_parent"
    android:layout_height="2dp"
    />

বা এক্সএমএলে বৈশিষ্ট্যগুলি সেট করুন

<com.your.package.app.DashedDividerView
    android:layout_width="match_parent"
    android:layout_height="2dp"
    app:dividerDirection="horizontal"
    app:dividerDashGap="2dp"
    app:dividerDashWidth="2dp"
    app:dividerDashColor="@color/light_gray"/>

2

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

এই এটা দেখায় কিভাবে হয়

dashed_border_layout.xml

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@color/black"
android:background="@drawable/dashed_border_out">
<LinearLayout
    android:layout_width="150dp"
    android:layout_height="50dp"
    android:padding="5dp"
    android:background="@drawable/dashed_border_in"
    android:orientation="vertical">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is&#10;Dashed Container"
        android:textSize="16sp" />
</LinearLayout>

dashed_border_in.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
    <shape>
        <corners android:radius="10dp" />
        <solid android:color="#ffffff" />
        <stroke
            android:dashGap="5dp"
            android:dashWidth="5dp"
            android:width="3dp"
            android:color="#0000FF" />
        <padding
            android:bottom="5dp"
            android:left="5dp"
            android:right="5dp"
            android:top="5dp" />
    </shape>
</item>

dashed_border_out.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
    <shape>
        <corners android:radius="12dp" />
    </shape>
</item>


1

আমি জানি না কেন তবে ভোট দেওয়া উত্তরগুলি আমার পক্ষে কার্যকর হয় না। আমি এটি এইভাবে লিখি এবং ভাল কাজ করে।
একটি কাস্টম ভিউ সংজ্ঞায়িত করুন:

public class XDashedLineView extends View {

private Paint   mPaint;
private Path    mPath;
private int     vWidth;
private int     vHeight;

public XDashedLineView(Context context) {
    super(context);
    init();
}

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

public XDashedLineView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();
}

private void init() {
    mPaint = new Paint();
    mPaint.setColor(Color.parseColor("#3F577C"));
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setPathEffect(new DashPathEffect(new float[] {10,10}, 0));
    mPath = new Path();
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    this.vWidth = getMeasuredWidth();
    this.vHeight = getMeasuredHeight();
    mPath.moveTo(0, this.vHeight / 2);
    mPath.quadTo(this.vWidth / 2, this.vHeight / 2, this.vWidth, this.vHeight / 2);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawPath(mPath, mPaint);
}
}

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

        <com.YOUR_PACKAGE_NAME.XDashedLineView
        android:layout_width="690dp"
        android:layout_height="1dp"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="620dp"/>

1

এই সমস্যাটি সমাধান করার জন্য আমি একটি কাস্টম ভিউ সহ একটি লাইব্রেরি তৈরি করেছি এবং এটি ব্যবহার করা খুব সহজ হওয়া উচিত। আরও জানতে https://github.com/Comcast/DahDit দেখুন। আপনি এর মতো ড্যাশযুক্ত লাইন যুক্ত করতে পারেন:

<com.xfinity.dahdit.DashedLine
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    app:dashHeight="4dp"
    app:dashLength="8dp"
    app:minimumDashGap="3dp"
    app:layout_constraintRight_toRightOf="parent"
    android:id="@+id/horizontal_dashes"/>

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

0

এখানে টিয়ার 777 এর অনুরূপ একটি অনুভূমিক রেখার জন্য একটি সমাধান:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="-1dp">
        <shape android:shape="line">
            <stroke
                android:width="1dp"
                android:color="#111"
                android:dashWidth="8dp"
                android:dashGap="2dp"
                />
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>
</layer-list>

ক্লু হল <item android:top="-1dp">

পুরানো ডিভাইসে ড্যাশযুক্ত লাইনটি দেখানোর জন্য (<= API 21) আপনার সাথে একটি ভিউ তৈরি করা উচিত android:layerType="software" ( অ্যান্ড্রয়েড ড্যাশড লাইনটি অঙ্কনীয় সম্ভাব্য আইসিএস বাগটি দেখুন ):

<?xml version="1.0" encoding="utf-8"?>
<View xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@drawable/dashed_line"
    android:layerType="software"
    />

এছাড়াও আপনি ছাড়া একই দৃশ্য যোগ করতে পারেন android:layerType="software"থেকে layout-v23ভাল কার্য সম্পাদনার জন্য, কিন্তু আমি নিশ্চিত করুন যে এটি এপিআই 23 সঙ্গে সমস্ত ডিভাইসেই কাজ করবে না।

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