android software - एंड्रॉइड में एक रेखा कैसे आकर्षित करें




download in (13)

सरल एक

 <TextView
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#c0c0c0"
    android:id="@+id/your_id"
    android:layout_marginTop="160dp" />

क्या कोई एंड्रॉइड में एक रेखा को आकर्षित करने के बारे में बता सकता है, शायद एक उदाहरण के साथ?


ImageView का उपयोग करके प्रोग्रामिक रूप से एक रेखा खींचने का एक और तरीका

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);

  }
}

  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);
                                        }
                                    });

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);

        }
}
}

canvas.drawLine(10, 10, 90, 10, paint);
canvas.drawLine(10, 20, 90, 20, paint);

यह एक सीधी क्षैतिज रेखा बनाएगा, उम्मीद है कि यह मदद करता है!


यदि आप दो लेआउट को अलग करने के लिए अपने लेआउट में एक साधारण रेखा चाहते हैं तो आप ऊंचाई और चौड़ाई के साथ एक सामान्य दृश्य का उपयोग कर सकते हैं, जिसमें आप लाइन चाहते हैं और एक सेट पृष्ठभूमि रंग है।

इस दृष्टिकोण के साथ आपको किसी व्यू को ओवरराइड करने या कैनवास का उपयोग करने की आवश्यकता नहीं है, बस xml में लाइन को सरल और साफ करें।

<View
 android:layout_width="match_parent"
 android:layout_height="1dp"
 android:background="@android:color/black" />

मैंने प्रदान किया गया उदाहरण कोड एक रेखा उत्पन्न करेगा जो स्क्रीन को चौड़ाई में भरता है और इसकी एक डीपी की ऊंचाई होती है।

यदि आपको छोटी स्क्रीन पर रेखा के चित्रण में समस्याएं हैं तो रेखा की ऊंचाई को पीएक्स में बदलने पर विचार करें। समस्या यह है कि एलडीपीआई स्क्रीन पर लाइन 0.75 पिक्सेल ऊंची होगी। कभी-कभी इसका परिणाम एक गोल होता है जो रेखा को गायब कर देता है। यदि यह आपके लेआउट के लिए एक समस्या है, तो लाइन की चौड़ाई को एक ressource फ़ाइल परिभाषित करें और छोटी स्क्रीन के लिए एक अलग ressource फ़ाइल बनाएं जो मान को 1 डीपी के बजाय 1px पर सेट करे।

यह दृष्टिकोण केवल प्रयोग योग्य है यदि आप क्षैतिज या लंबवत रेखाएं चाहते हैं जिनका प्रयोग लेआउट तत्वों को विभाजित करने के लिए किया जाता है। यदि आप किसी छवि में खींचे गए क्रॉस की तरह कुछ हासिल करना चाहते हैं तो मेरा दृष्टिकोण काम नहीं करेगा।


लेआउट पर क्षैतिज रेखा के लिए:

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

Canvas का उपयोग करके या View का उपयोग करके, आप दो मुख्य तरीकों से एक रेखा खींच सकते हैं।

कैनवास के साथ एक रेखा खींचना

documentation हम देखते हैं कि हमें निम्नलिखित विधि का उपयोग करने की आवश्यकता है:

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>

या यदि आप सिर्फ एक लाइन चाहते हैं

TextView line = new TextView(this);
            line.setBackgroundResource(android.R.color.holo_red_dark);
            line.setHeight((int) Utility.convertDpToPixel(1,this));

आप एक्सएमएल में आकार के माध्यम से सर्कल, रेखा, आयत आदि जैसे ड्रॉ करने योग्य बना सकते हैं:

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

यह 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 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);

यह मेरे लिए सभी विचित्र कीबोर्ड व्यवहार के लिए काम किया

private boolean isKeyboardVisible() {
    Rect r = new Rect();
    //r will be populated with the coordinates of your view that area still visible.
    mRootView.getWindowVisibleDisplayFrame(r);

    int heightDiff = mRootView.getRootView().getHeight() - (r.bottom - r.top);
    return heightDiff > 100; // if more than 100 pixels, its probably a keyboard...
}

protected void showKeyboard() {
    if (isKeyboardVisible())
        return;
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if (getCurrentFocus() == null) {
        inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    } else {
        View view = getCurrentFocus();
        inputMethodManager.showSoftInput(view, InputMethodManager.SHOW_FORCED);
    }
}

protected void hideKeyboard() {
    if (!isKeyboardVisible())
        return;
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    View view = getCurrentFocus();
    if (view == null) {
        if (inputMethodManager.isAcceptingText())
            inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS, 0);
    } else {
        if (view instanceof EditText)
            ((EditText) view).setText(((EditText) view).getText().toString()); // reset edit text bug on some keyboards bug
        inputMethodManager.hideSoftInputFromInputMethod(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}




android