উত্তর:
এটি একটি 2 লাইন আঁকবে যা স্ক্রিনের উপরের বাম দিকে ক্রস গঠন করে:
DrawView.java
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
public class DrawView extends View {
Paint paint = new Paint();
private void init() {
paint.setColor(Color.BLACK);
}
public DrawView(Context context) {
super(context);
init();
}
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public DrawView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawLine(0, 0, 20, 20, paint);
canvas.drawLine(20, 0, 0, 20, paint);
}
}
এটি শুরু করার ক্রিয়াকলাপ:
StartDraw.java
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
public class StartDraw extends Activity {
DrawView drawView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawView = new DrawView(this);
drawView.setBackgroundColor(Color.WHITE);
setContentView(drawView);
}
}
আপনি যদি দুটি বিন্যাস পৃথক করতে আপনার লেআউটে একটি সরল রেখা রাখতে চান তবে আপনি যে উচ্চতা এবং প্রস্থের সাথে লাইনটি রাখতে চান এবং একটি সেট ব্যাকগ্রাউন্ড রঙ চান তার সাথে একটি জেনেরিক ভিউ ব্যবহার করতে পারেন।
এই পদ্ধতির সাহায্যে আপনার কোনও ভিউ ওভাররাইড করার দরকার নেই বা নিজেকে খালি একটি ক্যানভাস ব্যবহার করার দরকার নেই এবং এক্সএমএলটিতে লাইন যুক্ত করতে হবে।
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/black" />
আমি যে উদাহরণ কোডটি দিয়েছি তা একটি লাইন তৈরি করবে যা স্ক্রিনের প্রস্থে পূর্ণ হয় এবং এর উচ্চতা এক ডিপি হয়।
আপনার যদি ছোট পর্দার রেখার অঙ্কন নিয়ে সমস্যা হয় তবে লাইনটির উচ্চতা পিক্সে পরিবর্তন হিসাবে বিবেচনা করুন। সমস্যাটি হল একটি এলডিপিআই স্ক্রিনে লাইনটি 0.75 পিক্সেল উচ্চ হবে be কখনও কখনও এর ফলে গোলাকার হতে পারে যা লাইনটি অদৃশ্য করে। আপনার লেআউটের ক্ষেত্রে যদি সমস্যা হয় তবে লাইনটির একটি প্রস্থ একটি রিসোর্স ফাইলের প্রস্থ নির্ধারণ করুন এবং ছোট পর্দার জন্য একটি পৃথক রিসোর্স ফাইল তৈরি করুন যা মান 1dp এর পরিবর্তে 1px এ সেট করে।
আপনি যদি অনুভূমিক বা উল্লম্ব লাইনগুলি লেআউট উপাদানগুলিকে বিভক্ত করতে ব্যবহার করতে চান তবেই এই পদ্ধতির ব্যবহারযোগ্য। আপনি যদি কোনও চিত্রের মতো ক্রসের মতো কিছু অর্জন করতে চান তবে আমার পদ্ধতির কাজ হবে না।
আপনি লাইন আঁকতে পারেন এমন দুটি প্রধান উপায় রয়েছে যা ব্যবহার করে Canvasবা একটি ব্যবহার করে View।
ডকুমেন্টেশন থেকে আমরা দেখতে পাই যে আমাদের নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করা দরকার:
drawLine (float startX, float startY, float stopX, float stopY, Paint paint)
এখানে একটি ছবি:

Paintবস্তু মাত্র বলে Canvasরঙ লাইন, কিভাবে ব্যাপক এটি হওয়া উচিত, এবং তাই রং কি।
এখানে কিছু নমুনা কোড রয়েছে:
private Paint paint = new Paint();
....
private void init() {
paint.setColor(Color.BLACK);
paint.setStrokeWidth(1f);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
startX = 20;
startY = 100;
stopX = 140;
stopY = 30;
canvas.drawLine(startX, startY, stopX, stopY, paint);
}
আপনার যদি কেবল একটি সরল অনুভূমিক বা উল্লম্ব লাইন প্রয়োজন হয়, তবে সবচেয়ে সহজ উপায় হতে পারে Viewআপনার এক্সএমএল লেআউট ফাইলটিতে কেবল একটি ব্যবহার করা । আপনি এই জাতীয় কিছু করবেন:
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/black" />
এটি দেখতে কেমন হবে তা দেখানোর জন্য এখানে দুটি লাইন (একটি অনুভূমিক এবং একটি উল্লম্ব) সহ একটি চিত্র রয়েছে:

এবং এটির জন্য এখানে সম্পূর্ণ এক্সএমএল লেআউটটি রয়েছে:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="TextView1 in vertical linear layout" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/black" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="TextView2 in vertical linear layout" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:layout_width="100dp"
android:layout_height="100dp"
android:padding="10dp"
android:text="TextView3 in horizontal linear layout" />
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@android:color/black" />
<TextView
android:layout_width="100dp"
android:layout_height="100dp"
android:padding="10dp"
android:text="TextView4 in horizontal linear layout" />
</LinearLayout>
</LinearLayout>
onDraw()তবে আপনার অঙ্কন কোডটি ঘিরে ফেলুন, if (someCondition) { draw... }তৈরি করুন someCondition = falseএবং তারপরে invalidate()আপনার ভিউতে কল করুন। এটি লাইন ছাড়াই ভিউ পুনরায় আঁকবে।
আপনি ফিঙ্গার পেইন্ট উদাহরণ ব্যবহার করে একাধিক সরল রেখা আঁকতে পারেন যা বিকাশকারী অ্যান্ড্রয়েডে রয়েছে। উদাহরণ লিঙ্ক
কেবল মন্তব্য করুন: mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
আপনি সরল রেখা আঁকতে সক্ষম হবেন।
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
public class JoinPointsActivity extends Activity {
/** Called when the activity is first created. */
Paint mPaint;
float Mx1,My1;
float x,y;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
MyView view1 =new MyView(this);
view1.setBackgroundResource(R.drawable.image_0031_layer_1);
setContentView(view1);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(0xFFFF0000);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
// mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(10);
}
public class MyView extends View {
private static final float MINP = 0.25f;
private static final float MAXP = 0.75f;
private Bitmap mBitmap;
private Canvas mCanvas;
private Path mPath;
private Paint mBitmapPaint;
public MyView(Context c) {
super(c);
mPath = new Path();
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(0xFFAAAAAA);
// canvas.drawLine(mX, mY, Mx1, My1, mPaint);
// canvas.drawLine(mX, mY, x, y, mPaint);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath, mPaint);
}
private float mX, mY;
private static final float TOUCH_TOLERANCE = 4;
private void touch_start(float x, float y) {
mPath.reset();
mPath.moveTo(x, y);
mX = x;
mY = y;
}
private void touch_move(float x, float y) {
float dx = Math.abs(x - mX);
float dy = Math.abs(y - mY);
if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
// mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
mX = x;
mY = y;
}
}
private void touch_up() {
mPath.lineTo(mX, mY);
// commit the path to our offscreen
mCanvas.drawPath(mPath, mPaint);
// kill this so we don't double draw
mPath.reset();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touch_start(x, y);
invalidate();
break;
case MotionEvent.ACTION_MOVE:
touch_move(x, y);
invalidate();
break;
case MotionEvent.ACTION_UP:
touch_up();
// Mx1=(int) event.getX();
// My1= (int) event.getY();
invalidate();
break;
}
return true;
}
}
}
package com.example.helloandroid;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
public class HelloAndroid2Activity extends Activity {
/** Called when the activity is first created. */
DrawView drawView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawView = new DrawView(this);
drawView.setBackgroundColor(Color.WHITE);
setContentView(drawView);
}
class DrawView extends View {
Paint paint = new Paint();
public DrawView(Context context) {
super(context);
paint.setColor(Color.BLUE);
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawLine(10, 20, 30, 40, paint);
canvas.drawLine(20, 10, 50, 20, paint);
}
}
}
লেআউটে অনুভূমিক রেখার জন্য:
<View
android:id="@+id/View03"
android:layout_width="fill_parent"
android:layout_height="5dip"
android:background="#0f0" />
লেআউটে উল্লম্ব লাইনের জন্য:
<View
android:id="@+id/View04"
android:layout_width="5dip"
android:layout_height="fill_parent"
android:background="#0f0" />
<TextView
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#c0c0c0"
android:id="@+id/your_id"
android:layout_marginTop="160dp" />
canvas.drawLine(10, 10, 90, 10, paint);
canvas.drawLine(10, 20, 90, 20, paint);
এটি একটি সোজা অনুভূমিক রেখা তৈরি করবে, আশা করি এটি সাহায্য করবে !.
আপনি নিম্নলিখিত হিসাবে xML আকারের মাধ্যমে বৃত্ত, লাইন, আয়তক্ষেত্র ইত্যাদির মতো একটি অঙ্কনযোগ্য তৈরি করতে পারেন:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line" >
<solid android:color="#00000000" />
<stroke
android:width="2dp"
android:color="#808080" />
</shape>
এই কোডটি একটি রৈখিক বিন্যাসে অনুভূমিক রেখা যুক্ত করে
View view = new View(this);
LinearLayout.LayoutParams lpView = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 1); // --> horizontal
view.setLayoutParams(lpView);
view.setBackgroundColor(Color.DKGRAY);
linearLayout.addView(view);
final SurfaceView surf = (SurfaceView)findViewById(R.id.surface_home);
surf.setOnTouchListener( new SurfaceView.OnTouchListener(){
private boolean moving = false;//stupid state
public boolean onTouch(View v, MotionEvent event) {
switch( event.getAction() ){
case MotionEvent.ACTION_DOWN:
final int x = (int)event.getX();
final int y = (int)event.getY();
final Rect bounds = mTiles.getBounds();
moving = bounds.intersects(x, y, x+1, y+1);
return true;
case MotionEvent.ACTION_MOVE:
if( moving ){
final int x_new = (int)event.getX();
final int y_new = (int)event.getY();
mDrawTiles.draw( new DrawLogic(){
public void draw(Rect _surface) {
mTiles.setBounds(
x_new - mDrawWidth/2,
y_new - mDrawHeight/2,
x_new + mDrawWidth/2,
y_new + mDrawHeight/2);
}
});
@ জানুস দ্বারা প্রদত্ত উত্তরের উন্নতি করতে
আমি এটি আমার শৈলীতে যুক্ত করেছি:
<style name="Divider">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">1dp</item>
<item name="android:background">?android:attr/listDivider</item>
</style>
তারপরে আমার লেআউটে কম কোড এবং পড়তে সহজ।
<View style="@style/Divider"/>
আপনি যদি অনুভূমিক রেখার ব্যবধান করতে চান তবে উপরেরটিটি করুন।
এবং দুটি দর্শনের মধ্যে উল্লম্ব রেখার জন্য আপনাকে অ্যান্ড্রয়েড প্রতিস্থাপন করতে হবে : লেআউট_উইথ প্যারামিটার (বৈশিষ্ট্য) অ্যান্ড্রয়েডের সাথে: বিন্যাস_ উচ্চতা
ইমেজভিউ ব্যবহার করে ক্রমগতভাবে একটি লাইন আঁকার জন্য অন্য পদ্ধতি
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Typeface;
import android.os.Bundle;
import android.widget.ImageView;
public class Test extends Activity {
ImageView drawingImageView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
drawingImageView = (ImageView) this.findViewById(R.id.DrawingImageView);
Bitmap bitmap = Bitmap.createBitmap((int) getWindowManager()
.getDefaultDisplay().getWidth(), (int) getWindowManager()
.getDefaultDisplay().getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawingImageView.setImageBitmap(bitmap);
// Line
Paint paint = new Paint();
paint.setColor(Color.GREEN);
paint.setStrokeWidth(10);
int startx = 50;
int starty = 100;
int endx = 150;
int endy = 210;
canvas.drawLine(startx, starty, endx, endy, paint);
}
}
আপনি যদি কাজ করছেন তবে আপনাকে ConstraintLayoutলাইনটি দেখানোর জন্য কমপক্ষে 2 টি সীমাবদ্ধতা নির্ধারণ করতে হবে। এটার মত:
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:background="@android:color/black"
app:layout_constraintEnd_toEndOf="@+id/someView1"
app:layout_constraintStart_toStartOf="@+id/someView2"
app:layout_constraintTop_toBottomOf="@+id/someView3" />
যদিও আমি 3 টি সীমাবদ্ধতার সংজ্ঞা দিয়েছি।
অথবা আপনি যদি কেবল একটি লাইন চান
TextView line = new TextView(this);
line.setBackgroundResource(android.R.color.holo_red_dark);
line.setHeight((int) Utility.convertDpToPixel(1,this));