آموزش برنامه نویسی اندروید

شروع موضوع توسط saalek110 ‏9 ژوئن 2019 در انجمن منطق و الگوریتم برنامه‌نویسی

  1. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,436
    تشکر شده:
    1,274
    امتیاز دستاورد:
    113
    آموزش برنامه نویسی اندروید

    هدف برنامه قابل اجرا برای موبایل های اندرویدی است.
    فایل انتقالی به موبایل پسوند Apk دارد.
     
    آخرین ویرایش: ‏10 ژوئن 2019
    نوشته شده توسط saalek110 در ‏9 ژوئن 2019
  2. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,436
    تشکر شده:
    1,274
    امتیاز دستاورد:
    113
    محیط کار : ADT Android Developer Tools
    اکلیپس است که برای برنامه نویسی اندروید آماده شده.
    یک پروژه خالی بسازید. empty
    a1.png
    a2.png
    a3.png
     
    آخرین ویرایش: ‏10 ژوئن 2019
    نوشته شده توسط saalek110 در ‏9 ژوئن 2019
    Majid و the_king از این پست تشکر کرده اند.
  3. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,436
    تشکر شده:
    1,274
    امتیاز دستاورد:
    113
    دکمه ویرایش چرا نیست؟ این طور که نمیشه مطلب نوشت.
    اکانت دیگر ساختم ویرایش داشت. این اکانت چرا ویرایش ندارد؟
     
    آخرین ویرایش: ‏10 ژوئن 2019
    نوشته شده توسط saalek110 در ‏9 ژوئن 2019
  4. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,436
    تشکر شده:
    1,274
    امتیاز دستاورد:
    113
    ادیت شد.
     
    آخرین ویرایش: ‏10 ژوئن 2019
    نوشته شده توسط saalek110 در ‏9 ژوئن 2019
  5. the_king

    the_king مدیرکل انجمن

    ارسال‌ها:
    10,887
    تشکر شده:
    10,961
    امتیاز دستاورد:
    113
    قاعدتا نباید مشکلی در دسترسی وجود داشته باشه، محدودیت فقط برای یک حساب کاربری که قابل تعریف نیست.
    برای کاربران عادی یک محدودیت زمانی هست که بتوانند فقط تا زمان معینی پست هاشون رو ویرایش کنند ولی فقط برای کاربران عادی، در گروه کاربری مدیران بازنشسته همچین محدودیتی نیست.
     
    نوشته شده توسط the_king در ‏9 ژوئن 2019
    Majid و saalek110 از این پست تشکر کرده اند.
  6. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,436
    تشکر شده:
    1,274
    امتیاز دستاورد:
    113
    برای اولین تمرین با باتون و تکست ادیت کار می کنیم. از هر کدام یکی روی فرم بیاورید. تغییر نام ندهید. از همان نامها در کد استفاده می کنیم ولی می توانید تکست آنها را تغییر دهیم. یعنی نوشته روی باتون و متن داخل تکست ادیت را می توانید به دلخواه خود تغییر بدهید.

    کد (Text):

    package com.example.tut1;

    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;

    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;

    public class MainActivity extends ActionBarActivity {
         //1 region
    String str1;
    EditText et ;
    Button button;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);
             //2 region
             button = (Button) findViewById(R.id.button1);
             button.setOnClickListener(new View.OnClickListener() { //a
                @Override
                public void onClick(View view) {
                // 3 region
                et = (EditText) findViewById(R.id.editText1);
                str1 = et.getText().toString();
                Toast.makeText(getApplicationContext(), str1, Toast.LENGTH_LONG).show();//display text
                }
            });//a



     
    a3.png a4.png
    از کدها قبل و بعد اضافه کردن کدها عکس گرفتم تا مکان اضافه کردن کد را ببینید.
    از عکسها کمک بگییرید تا مکان درج کد را بفهمید. و بعد از قسمت کد پست می توانید کد هر قسمت را کپی کنید و در پروژه خود بیافزایید.

    نامهای باتون و ادیت تکست این است:
    editText1 and button1
    که شما هم وقتی به روی فرم بیاورید نامها همین است.
    متغیرها را کجا بسازیم؟
    من 3 رجیون در کد مشخص کردم.
    اول در رجیون 2 متغیر ساختم ولی داخل کد کلیک باتون یعنی رجیون 3 شناسایی نمیشد بنابراین بردم اول کلاس تعریف کردم. یعنی رجیون 1/
    یعنی رجیون های 2 و 3 به رجیون 1 دسترسی دارند. ولی رجیون 3 به رجیون 2 دسترسی ندارد.
    import
    قبل کلاس هم چند ایمپورت می بینیدکه برای کدها لازم است.
    در رجیون 2 باتون را پیداکردیم. با کدی که می بینید.
    رجیون 3 کدهایی است که بعد کلیک باتون رخ می دهد.
    در رجیون 3 ادیت تکست را پیدا کردیم و متنش را دریافت کردیم.
    Toast
    و تابع تاست هم متن را نمایش می دهد.
    a5.png

    نتیجه اجرا:
    سمت چپ ادیت تکست را می بینید و سمت راست متن چاپ شده با تاست را.
    هر کلمه ای که در ادیت تکست بنویسید و باتون را بزنید پایین صفحه چاپ می شود.

    من در کد نام باتون را استفاده کردم:
    کد (Text):

    Button button;
     
    ولی فکر کنم انتخاب خوبی نباشد چون اگر دو باتون داشته باشیم و بخواهیم باتون 1 و باتون 2 اسم بگذاریم اولی همان نام دکمه روی فرم می شود. می توانید از بی تی استفاده کنید.
    bt
    کد (Text):

    Button bt1,bt2;
     
     
    آخرین ویرایش: ‏10 ژوئن 2019
    نوشته شده توسط saalek110 در ‏10 ژوئن 2019
    Majid و the_king از این پست تشکر کرده اند.
  7. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,436
    تشکر شده:
    1,274
    امتیاز دستاورد:
    113
    برای نوآموزان: قوانین کدنویسی سی و جاوا شبیه هم است. در پروژه ما کدها در فایل با پسوند جاوا ذخیره می شود.
    شامل:
    بزرگی و کوچکی حروف مهم است.
    آخر هر خط سمی کلون می گذاریم.
    محدوده کلاس و تابع با کروشه مشخص می شود. {}
    ورودی توابع داخل پرانتز قرار می گیرد.( )
    وقتی چند متغیر پشت سر هم تعریف کنیم بین آنها ویرگول می گذاریم. ,
    کد (Text):

    String str1,str2,str3,str4;
     

    خروجی تابع با گذاشتن یک مساوی داخل یک متغیر ریخته میشه.مثل کد زیر.که تابع محتوای ادیت تکست را به رشته تبدیل می کند و در متغیر ریخته می شود.
    str1
    کد (Text):

    str1 = et.getText().toString();
     
    در سی فایلهای مورد نیاز را اول کد اینکلود می کنیم در جاوا ایمپورت می کنیم.
    اگر کلاس و توارث را بلد باشید به کار کمک می کند. داخل کلاس توابعی قرار دارد. کلاس متغیرهایی هم دارد.
    در کد بالا ما MainActivity کلاس است و onCreate تابع است. onCreate یعنی موقع ایجاد یعنی وقتی برنامه اجرا می شود. ما کدمان را داخل onCreate درج کردیم .
    هر سوالی داشتید بپرسید.
     
    آخرین ویرایش: ‏10 ژوئن 2019
    نوشته شده توسط saalek110 در ‏10 ژوئن 2019
    the_king از این پست تشکر کرده است.
  8. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,436
    تشکر شده:
    1,274
    امتیاز دستاورد:
    113
    می توانید فایل با پسوند apk را به موبایل منتقل کنید یا در ویندوز در نرم افزارهای مخصوص اجرای apk اجرا کنید مثل بلواستک. BlueStacks
     
    نوشته شده توسط saalek110 در ‏10 ژوئن 2019
    the_king از این پست تشکر کرده است.
  9. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,436
    تشکر شده:
    1,274
    امتیاز دستاورد:
    113
    برنامه بعدی یک برنامه opengl است. یک پروژه خالی بسازید.
    به صفحه زیر بروید:
    A simple example of using an Android Renderer to illustrate OpenGL ES boilerplate.

    کد زیر را خواهید یافت:
    کد (Text):

    /* GraphicGlDemoActivity.java
    * Author: Yong Bakos
    * Since: 11/26/2012
    * Thanks to:
    * Cube: http://intransitione.com/blog/create-a-spinning-cube-with-opengl-es-and-android/
    * OpenGL Boilerplate: http://www.jayway.com/2009/12/03/opengl-es-tutorial-for-android-part-i/
    */
    package com.humanoriented.sudoku;
    import java.nio.ByteBuffer;
    import java.nio.ByteOrder;
    import java.nio.FloatBuffer;
    import javax.microedition.khronos.egl.EGLConfig;
    import javax.microedition.khronos.opengles.GL10;
    import android.app.Activity;
    import android.opengl.GLSurfaceView;
    import android.opengl.GLSurfaceView.Renderer;
    import android.opengl.GLU;
    import android.os.Bundle;
    import android.view.Window;
    import android.view.WindowManager;
    public class GraphicGlDemoActivity extends Activity {
    public class DemoRenderer implements Renderer {
    private Cube cube = new Cube();
    private float rotation;
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
    // Depth buffer setup.
    gl.glClearDepthf(1.0f);
    // Enables depth testing.
    gl.glEnable(GL10.GL_DEPTH_TEST);
    // The type of depth testing to do.
    gl.glDepthFunc(GL10.GL_LEQUAL);
    // Really nice perspective calculations.
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
    }
    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
    // Sets the current view port to the new size.
    gl.glViewport(0, 0, width, height);
    // Select the projection matrix
    gl.glMatrixMode(GL10.GL_PROJECTION);
    // Reset the projection matrix
    gl.glLoadIdentity();
    // Calculate the aspect ratio of the window
    GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f, 100.0f);
    // Select the modelview matrix
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    // Reset the modelview matrix
    gl.glLoadIdentity();
    }
    @Override
    public void onDrawFrame(GL10 gl) {
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    gl.glLoadIdentity();
    gl.glTranslatef(0.0f, 0.0f, -10.0f);
    gl.glRotatef(rotation, 1.0f, 1.0f, 1.0f);
    cube.draw(gl);
    gl.glLoadIdentity();
    rotation -= 0.15f;
    }
    }
    class Cube {
    private FloatBuffer mVertexBuffer;
    private FloatBuffer mColorBuffer;
    private ByteBuffer mIndexBuffer;
    private float vertices[] = {
    -1.0f, -1.0f, -1.0f,
    1.0f, -1.0f, -1.0f,
    1.0f, 1.0f, -1.0f,
    -1.0f, 1.0f, -1.0f,
    -1.0f, -1.0f, 1.0f,
    1.0f, -1.0f, 1.0f,
    1.0f, 1.0f, 1.0f,
    -1.0f, 1.0f, 1.0f
    };
    private float colors[] = {
    0.0f, 1.0f, 0.0f, 1.0f,
    0.0f, 1.0f, 0.0f, 1.0f,
    1.0f, 0.5f, 0.0f, 1.0f,
    1.0f, 0.5f, 0.0f, 1.0f,
    1.0f, 0.0f, 0.0f, 1.0f,
    1.0f, 0.0f, 0.0f, 1.0f,
    0.0f, 0.0f, 1.0f, 1.0f,
    1.0f, 0.0f, 1.0f, 1.0f
    };
    private byte indices[] = {
    0, 4, 5, 0, 5, 1,
    1, 5, 6, 1, 6, 2,
    2, 6, 7, 2, 7, 3,
    3, 7, 4, 3, 4, 0,
    4, 7, 6, 4, 6, 5,
    3, 0, 1, 3, 1, 2
    };
    public Cube() {
    ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length * 4);
    byteBuf.order(ByteOrder.nativeOrder());
    mVertexBuffer = byteBuf.asFloatBuffer();
    mVertexBuffer.put(vertices);
    mVertexBuffer.position(0);
    byteBuf = ByteBuffer.allocateDirect(colors.length * 4);
    byteBuf.order(ByteOrder.nativeOrder());
    mColorBuffer = byteBuf.asFloatBuffer();
    mColorBuffer.put(colors);
    mColorBuffer.position(0);
    mIndexBuffer = ByteBuffer.allocateDirect(indices.length);
    mIndexBuffer.put(indices);
    mIndexBuffer.position(0);
    }
    public void draw(GL10 gl) {
    gl.glFrontFace(GL10.GL_CW);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
    gl.glColorPointer(4, GL10.GL_FLOAT, 0, mColorBuffer);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
    gl.glDrawElements(GL10.GL_TRIANGLES, 36, GL10.GL_UNSIGNED_BYTE,
    mIndexBuffer);
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
    }
    }
    @Override
    public void onCreate(Bundle state) {
    super.onCreate(state);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    GLSurfaceView view = new GLSurfaceView(this);
    view.setRenderer(new DemoRenderer());
    setContentView(view);
    }
    }
     
    تغییرات:
    اول اینکه : این خطش را استفاده نکنید و کد پروژه خودتان را استفاده کنید:
    کد (Text):

    package com.humanoriented.sudoku;
     
    دوم : بروید انتهای کد ببینید تابع onCreate را چطور تغییر داده. همان تغییرات را اعمال کنید.
    سوم : دو کلاس DemoRenderer و Cube که داخل کلاس MainActivity اضافه کرده اضافه کنید.
    جهارم: ایمپورت ها را هم اضافه کنید.
    نتیجه اجرا: یک مکعب رنگی در حال چرخش.
    a1.png

    از قسمتی از کدهای سایت مذکور عکس گرفتم:
    a1.png
     
    آخرین ویرایش: ‏10 ژوئن 2019
    نوشته شده توسط saalek110 در ‏10 ژوئن 2019
    the_king از این پست تشکر کرده است.

به اشتراک بگذارید