close
تبلیغات در اینترنت
Fingerpaint,()onDraw, ()onTouch,()invalidate,پروژه نقاشی در اندروید,نق
صفحه اصلی پرشین استک

{ پرشین استک }

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


پرشین استک تنها یک سایت نیست ، بلکه یک پروژه همگانی می باشد .


تعداد مطالب :
142


تعداد توسعه دهندگان :
11


تاریخ امروز :
سه شنبه 04 اردیبهشت 1397

به کانال تلگرام ما بپیوندید


×

لیست سوالات من

افزودن

چگونه می توان در اندروید پروژه ای ساخت که در آن با انگشت بتوان بر روی یک بوم (Canvas) طراحی کرد ؟

می خواهم رویداد لمس (touch) و رویداد حرکت انگشت (Motion) را در پروژه اندرویدی بدست بیاورم .

 

پاسخ 1 :

با رفتن به نمایش Fingerpaint در نمونه های SDK شروع کنید .

کد نمونه :

 

public class MainActivity extends Activity{

DrawingView dv ;
private Paint mPaint;

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
dv = new DrawingView(this);
setContentView(dv);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(Color.GREEN);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(12);
}

public class DrawingView extends View{

public int width;
public int height;
 
private Bitmap mBitmap;
private Canvas mCanvas;
private Path mPath;
private Paint mBitmapPaint;
Context context;
private Paint circlePaint;
private Path circlePath;

public DrawingView(Context c){
super(c);
context = c;
mPath = new Path();
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
circlePaint = new Paint();
circlePath = new Path();
circlePaint.setAntiAlias(true);
circlePaint.setColor(Color.BLUE);
circlePaint.setStyle(Paint.Style.STROKE);
circlePaint.setStrokeJoin(Paint.Join.MITER);
circlePaint.setStrokeWidth(4f);
}

@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){
super.onDraw(canvas);
canvas.drawBitmap( mBitmap,0,0, mBitmapPaint);
canvas.drawPath( mPath, mPaint);
canvas.drawPath( circlePath, circlePaint);
}

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;

circlePath.reset();
circlePath.addCircle(mX, mY,30,Path.Direction.CW);
}
}

private void touch_up(){
mPath.lineTo(mX, mY);
circlePath.reset();
// commit the path to our offscreen
mCanvas.drawPath(mPath, mPaint);
// kill this so we don't double draw
mPath.reset();
}

@Override
public boolean onTouchEvent(MotionEventevent){
float x = event.getX();
float y = event.getY();


switch(event.getAction()){
caseMotionEvent.ACTION_DOWN:
touch_start(x, y);
invalidate();
break;
caseMotionEvent.ACTION_MOVE:
touch_move(x, y);
invalidate();
break;
caseMotionEvent.ACTION_UP:
touch_up();
invalidate();
break;
}
return true;
}
}
}

 

شما یک کلاس view که از View ، extend شده است ، ایجاد می کنید . متد ()onDraw را لغو (override) می کنید . مسیر جایی که انگشتان لمس می شود و حرکت می کند را اضافه می کنید. شما متد  ()onTouch را برای این هدف ، لغو (override) می کنید . در متد ()onDraw شما با استفاده از رنگ انتخابی خود ، طراحی می کنید . باید متد ()invalidate را فراخوانی کنید تا view را تازه سازی (refresh) کند . برای انتخاب گزینه ها می توانید روی منو کلیک کرده و گزینه ها مورد نظر را انتخاب کنید .

کد :

 

public class FingerPaintActivity extends Activity
implements ColorPickerDialog.OnColorChangedListener{

MyView mv;
AlertDialog dialog;

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

mv = new MyView(this);
mv.setDrawingCacheEnabled(true);
mv.setBackgroundResource(R.drawable.afor);//set the back ground if you wish to
setContentView(mv);
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(20);
mEmboss = new EmbossMaskFilter(newfloat[]{1,1,1},
0.4f,6,3.5f);
mBlur = new BlurMaskFilter(8,BlurMaskFilter.Blur.NORMAL);
}

private Paint mPaint;
private MaskFilter mEmboss;
private MaskFilter mBlur;

public void colorChanged(int color){
mPaint.setColor(color);
}

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;
Context context;

public MyView(Context c){
super(c);
context = 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){
super.onDraw(canvas);

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){
//showDialog();
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();
mPaint.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.SCREEN));
//mPaint.setMaskFilter(null);
}

@Override
public boolean onTouchEvent(MotionEventevent){
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();
invalidate();
break;
}
return true;
}
}

private static final int COLOR_MENU_ID = Menu.FIRST;
private static final int EMBOSS_MENU_ID = Menu.FIRST +1;
private static final int BLUR_MENU_ID = Menu.FIRST +2;
private static final int ERASE_MENU_ID = Menu.FIRST +3;
private static final int SRCATOP_MENU_ID = Menu.FIRST +4;
private static final int Save = Menu.FIRST +5;

@Override
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);

menu.add(0, COLOR_MENU_ID,0,"Color").setShortcut('3','c');
menu.add(0, EMBOSS_MENU_ID,0,"Emboss").setShortcut('4','s');
menu.add(0, BLUR_MENU_ID,0,"Blur").setShortcut('5','z');
menu.add(0, ERASE_MENU_ID,0,"Erase").setShortcut('5','z');
menu.add(0, SRCATOP_MENU_ID,0,"SrcATop").setShortcut('5','z');
menu.add(0,Save,0,"Save").setShortcut('5','z');

return true;
}

@Override
public boolean onPrepareOptionsMenu(Menu menu){
super.onPrepareOptionsMenu(menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item){
mPaint.setXfermode(null);
mPaint.setAlpha(0xFF);

switch (item.getItemId()){
case COLOR_MENU_ID:
new ColorPickerDialog(this,this, mPaint.getColor()).show();
return true;
case EMBOSS_MENU_ID:
if (mPaint.getMaskFilter()!= mEmboss){
mPaint.setMaskFilter(mEmboss);
}else{
mPaint.setMaskFilter(null);
}
return true;
case BLUR_MENU_ID:
if (mPaint.getMaskFilter()!= mBlur){
mPaint.setMaskFilter(mBlur);
}else{
mPaint.setMaskFilter(null);
}
return true;
case ERASE_MENU_ID:
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
mPaint.setAlpha(0x80);
return true;
case SRCATOP_MENU_ID:

mPaint.setXfermode(new PorterDuffXfermode(
PorterDuff.Mode.SRC_ATOP));
mPaint.setAlpha(0x80);
return true;
case Save:
AlertDialog.Builder editalert = new AlertDialog.Builder(FingerPaintActivity.this);
editalert.setTitle("Please Enter the name with which you want to Save");
final EditText input = new EditText(FingerPaintActivity.this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT);
input.setLayoutParams(lp);
editalert.setView(input);
editalert.setPositiveButton("OK",new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int whichButton){

String name = input.getText().toString();
Bitmap bitmap = mv.getDrawingCache();

String path = Environment.getExternalStorageDirectory().getAbsolutePath();
File file = new File("/sdcard/"+name+".png");
try
{
if (!file.exists())
{
file.createNewFile();
}
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(CompressFormat.PNG,10, ostream);
ostream.close();
mv.invalidate();
}
catch(Exception e)
{
e.printStackTrace();
}finally
{

mv.setDrawingCacheEnabled(false);
}
}
});

editalert.show();
return true;
}
return super.onOptionsItemSelected(item);
}
}

 

 

برداشتن رنگ :

 

public class ColorPickerDialogextendsDialog{

public interface OnColorChangedListener{
void colorChanged(int color);
}

private OnColorChangedListener mListener;
private int mInitialColor;

private static class ColorPickerViewextendsView{
private Paint mPaint;
private Paint mCenterPaint;
private finalint[] mColors;
private OnColorChangedListener mListener;

ColorPickerView(Context c,OnColorChangedListener l,int color){
super(c);
mListener = l;
mColors = new int[]{
0xFFFF0000,0xFFFF00FF,0xFF0000FF,0xFF00FFFF,0xFF00FF00,
0xFFFFFF00,0xFFFF0000
};
Shader s = new SweepGradient(0,0, mColors,null);

mPaint = newPaint(Paint.ANTI_ALIAS_FLAG);
mPaint.setShader(s);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(32);

mCenterPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mCenterPaint.setColor(color);
mCenterPaint.setStrokeWidth(5);
}

private boolean mTrackingCenter;
private boolean mHighlightCenter;

@Override
protected void onDraw(Canvas canvas){
float r = CENTER_X - mPaint.getStrokeWidth()*0.5f;

canvas.translate(CENTER_X, CENTER_X);

canvas.drawOval(newRectF(-r,-r, r, r), mPaint);
canvas.drawCircle(0,0, CENTER_RADIUS, mCenterPaint);

if (mTrackingCenter){
int c = mCenterPaint.getColor();
mCenterPaint.setStyle(Paint.Style.STROKE);


if (mHighlightCenter){
mCenterPaint.setAlpha(0xFF);
}else{
mCenterPaint.setAlpha(0x80);
}
canvas.drawCircle(0,0,
CENTER_RADIUS + mCenterPaint.getStrokeWidth(),
mCenterPaint);

mCenterPaint.setStyle(Paint.Style.FILL);
mCenterPaint.setColor(c);
}
}

@Override

protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){
setMeasuredDimension(CENTER_X*2, CENTER_Y*2);
}

private static final int CENTER_X = 100;
private static final int CENTER_Y = 100;
private static final int CENTER_RADIUS = 32;

private int floatToByte(float x){
int n = java.lang.Math.round(x);
return n;
}

private int pinToByte(int n){
if (n < 0){
n = 0;
}else if(n > 255){
n = 255;
}
return n;
}

private int ave(int s,int d,float p){
return s + java.lang.Math.round(p *(d - s));
}

private int interpColor(int colors[],float unit){
if (unit <= 0){
return colors[0];
}
if (unit >= 1){
return colors[colors.length - 1];
}

float p = unit *(colors.length - 1);
int i =(int)p;
p -= i;

// now p is just the fractional part [0...1) and i is the index
int c0 = colors[i];
int c1 = colors[i+1];
int a = ave(Color.alpha(c0),Color.alpha(c1), p);
int r = ave(Color.red(c0),Color.red(c1), p);
int g = ave(Color.green(c0),Color.green(c1), p);
int b = ave(Color.blue(c0),Color.blue(c1), p);

return Color.argb(a, r, g, b);
}

private int rotateColor(int color,float rad){
float deg = rad *180/3.1415927f;
int r = Color.red(color);
int g = Color.green(color);
int b = Color.blue(color);

ColorMatrix cm = newColorMatrix();
ColorMatrix tmp = newColorMatrix();

cm.setRGB2YUV();
tmp.setRotate(0, deg);
cm.postConcat(tmp);
tmp.setYUV2RGB();
cm.postConcat(tmp);

finalfloat[] a = cm.getArray();

int ir = floatToByte(a[0]* r + a[1]* g + a[2]* b);
int ig = floatToByte(a[5]* r + a[6]* g + a[7]* b);
int ib = floatToByte(a[10]* r + a[11]* g + a[12]* b);

return Color.argb(Color.alpha(color), pinToByte(ir),
pinToByte(ig), pinToByte(ib));
}

private static final float PI = 3.1415926f;

@Override
public boolean onTouchEvent(MotionEventevent){
float x = event.getX()- CENTER_X;
float y = event.getY()- CENTER_Y;
boolean inCenter = java.lang.Math.sqrt(x*x + y*y)<= CENTER_RADIUS;

switch (event.getAction()){
caseMotionEvent.ACTION_DOWN:

mTrackingCenter = inCenter;
if (inCenter){

mHighlightCenter = true;
invalidate();
break;
}
caseMotionEvent.ACTION_MOVE:
if (mTrackingCenter){
if (mHighlightCenter != inCenter){
mHighlightCenter = inCenter;

invalidate();
}
}else{
float angle = (float)java.lang.Math.atan2(y, x);
// need to turn angle [-PI ... PI] into unit [0....1]
float unit = angle/(2*PI);
if (unit < 0){
unit += 1;
}
mCenterPaint.setColor(interpColor(mColors, unit));
invalidate();
}
break;
caseMotionEvent.ACTION_UP:
if (mTrackingCenter){
if (inCenter){
mListener.colorChanged(mCenterPaint.getColor());
}
mTrackingCenter = false;// so we draw w/o halo
invalidate();
}
break;
}
return true;
}
}

public ColorPickerDialog(Context context,
OnColorChangedListener listener,
int initialColor){
super(context);

mListener = listener;
mInitialColor = initialColor;
}

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
OnColorChangedListener l = new OnColorChangedListener(){
public void colorChanged(int color){
mListener.colorChanged(color);
dismiss();
}
};

setContentView(new ColorPickerView(getContext(), l, mInitialColor));
setTitle("Pick a Color");
}
}

 

پاسخ 2 :

کد زیر نشان می دهد که چگونه می توان نقاشی یا طرح را پاک کرد :

 

public void clearDrawing()
{
Utils.Log("RaghunandanDraw, how to clear....");

setDrawingCacheEnabled(false);
// don't forget that one and the match below,
// or you just keep getting a duplicate when you save.

onSizeChanged(width, height, width, height);
invalidate();

setDrawingCacheEnabled(true);
}

@Override
protected void onSizeChanged(int w,int h,int oldw,int oldh)
{
super.onSizeChanged(w, h, oldw, oldh);

width = w;// don't forget these
height = h;

mBitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
}

 

کد زیر نشان می دهد که چگونه می توان نقاشی را ذخیره کرد :

 

public DrawingView(Context c)
{
circlePaint.setStrokeJoin(Paint.Join.MITER);
circlePaint.setStrokeWidth(4f);
etc...

// in the class where you set up the view, add this:
setDrawingCacheEnabled(true);
}

public void saveDrawing()
{
Bitmap whatTheUserDrewBitmap = getDrawingCache();
// don't forget to clear it (see above) or you just get duplicates

// almost always you will want to reduce res from the very high screen res
whatTheUserDrewBitmap =
ThumbnailUtils.extractThumbnail(whatTheUserDrewBitmap,256,256);
// NOTE that's an incredibly useful trick for cropping/resizing squares
// while handling all memory problems etc
// http://stackoverflow.com/a/17733530/294884

// you can now save the bitmap to a file, or display it in an ImageView:
ImageView testArea =...
testArea.setImageBitmap( whatTheUserDrewBitmap );

// these days you often need a "byte array". for example,
// to save to parse.com or other cloud services
ByteArrayOutputStream baos = new ByteArrayOutputStream();
whatTheUserDrewBitmap.compress(Bitmap.CompressFormat.PNG,0, baos);
byte[] yourByteArray;
yourByteArray = baos.toByteArray();
}

 

پاسخ 3 :

آموزش رسم خط با استفاده از کلاس های Bitmap ، Paint و Canvas . پروژه androiddraw

کد زیر برای رسم خط با استفاده از کلاس Canvas است :

 

public class TestLineView extends View{

private Paint paint;
private PointF startPoint, endPoint;
private boolean isDrawing;

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

private void init()
{
paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(2);
paint.setAntiAlias(true);
}

@Override
protected void onDraw(Canvas canvas)
{
if (isDrawing)
{
canvas.drawLine(startPoint.x, startPoint.y, endPoint.x, endPoint.y, paint);
}
}

@Override
public boolean onTouchEvent(MotionEventevent)
{
switch (event.getAction())
{
caseMotionEvent.ACTION_DOWN:
startPoint = new PointF(event.getX(),event.getY());
endPoint = new PointF();
isDrawing = true;
break;
caseMotionEvent.ACTION_MOVE:
if (isDrawing)
{
endPoint.x = event.getX();
endPoint.y = event.getY();
invalidate();
}
break;
caseMotionEvent.ACTION_UP:
if (isDrawing)
{
endPoint.x = event.getX();
endPoint.y = event.getY();
isDrawing = false;
invalidate();
}
break;
default:
break;
}
return true;
}
}

 

پاسخ 4 :

می توانید از کد زیر استفاده کنید :

 

public class DoodleCanvas extends View{

private Paint mPaint;
private Path mPath;


public DoodleCanvas(Context context,AttributeSet attrs){
super(context, attrs);
mPaint = new Paint();
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(10);
mPath = new Path();
}

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

@Override
public boolean onTouchEvent(MotionEventevent){

switch (event.getAction()){

caseMotionEvent.ACTION_DOWN:
mPath.moveTo(event.getX(),event.getY());
break;

caseMotionEvent.ACTION_MOVE:
mPath.lineTo(event.getX(),event.getY());
invalidate();
break;

caseMotionEvent.ACTION_UP:
break;
}

return true;
}
}

 

پاسخ 5 :

من فکر می کنم مهم است که یک چیزی اضافه کنید، اگر از تورم طرح (layout inflation) استفاده کنید که سازنده در drawview صحیح نیست، این سازندگان را در کلاس اضافه کنید:

 

public DrawingView(Context c,AttributeSet attrs){
super(c, attrs);
...
}

public DrawingView(Context c,AttributeSet attrs,int defStyle){
super(c, attrs, defStyle);
...
}

 

 

یا سیستم اندروید در تورم فایل طرح (layout) شکست می خورد .

 

صفحه اصلی

39

21 / 05 / 1396

PERSIAN STACK


دانلود تمامی API های اندروید

ادامه مطلب

689

چرا گاهی اوقات API موقعیت مکانی سرویس گوگل پلی ، موقعیت مکانی اشتباهی را برمی گرداند ؟

ادامه مطلب

651

چگونه نرم افزار ضبط صدای اندرویدی بسازیم ؟

ادامه مطلب

551

چرا TextView کلمات را با حروف می شکند ؟

ادامه مطلب

513

چگونه Google API برای سطح API 25 را پیدا کنیم ؟

ادامه مطلب

383

چرا وبسایت تجارت الکترونیک Magento 2 در Webview اندروید کار نمی کند ؟

ادامه مطلب

383

دانلود پروژه نمایش جستجوی کتاب برای اندروید

ادامه مطلب

347

قسمت شانزدهم - جدول ها در HTML

ادامه مطلب

273

دانلود کتابخانه Retrofit برای اندروید + پروژه

ادامه مطلب

269

دانلود سورس کد بازی اندرویدی Klooni 1010! + فایل APK

ادامه مطلب

261

در تکمیل خودکار اندروید ، دلیل dispatchProvideAutofillStructure() not laid out چیست ؟

ادامه مطلب

247

چرا زمانی که با استفاده از cordova در اندروید 7.0 ، اس ام اس ارسال می کنیم ، با اثتثنای (Exception) امنیتی مواج

ادامه مطلب

245

آیا راهی برای یافتن تغیرات ماه در نمای تقویم اندروید (calendar view) وجود دارد ؟

ادامه مطلب

243

چگونه ارور com.bumptech.glide.Registry$NoModelLoaderAvailableException: Failed to find any ModelLoaders را در اندروید رفع کنیم ؟

ادامه مطلب

209

دانلود سورس کد اپلیکیشن هواشناسی برای اندروید + فایل APK

ادامه مطلب

199

دانلود سورس کد اپلیکیشن اسکنر بارکد برای اندروید + فایل APK

ادامه مطلب

157

دانلود سورس کد تمامی نسخه های تلگرام + فایل های نصبی

ادامه مطلب

155

آموزش استفاده از دیتابیس آماده در پروژه اندرویدی

ادامه مطلب

149

دانلودسورس کد اپلیکیشن موزیک پلیر برای اندروید + فایل APK

ادامه مطلب

143

دانلود تمامی نسخه های gradle برای اندروید

ادامه مطلب

143

دانلود اسکریپت جاوای PS-CH# - ایجاد ورودی متنی پیشرفته

ادامه مطلب

یکشنبه 05 آذر 1396

قسمت هفدهم - لیست ها در HTML

ادامه مطلب

یکشنبه 21 آبان 1396

چگونه می توان با استفاده از CSS ، رنگ placeholder را تغییر داد ؟

ادامه مطلب

یکشنبه 21 آبان 1396

قسمت شانزدهم - جدول ها در HTML

ادامه مطلب

شنبه 20 آبان 1396

دانلود تمامی نسخه های gradle برای اندروید

ادامه مطلب

شنبه 20 آبان 1396

قسمت پانزدهم - عکس ها در HTML

ادامه مطلب

جمعه 19 آبان 1396

قسمت چهاردهم - لینک ها در HTML

ادامه مطلب

یکشنبه 14 آبان 1396

آموزش ساخت و شخصی سازی Navigation Drawer در اندروید استودیو

ادامه مطلب

یکشنبه 14 آبان 1396

قسمت سیزدهم - CSS در HTML

ادامه مطلب

شنبه 13 آبان 1396

قسمت بیست و پنجم (قسمت آخر) - آموزش ساخت بازی حدس

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت بیست و چهارم - آموزش نحوه ی پردازش فایل ها در جاوا

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت بیست و سوم - برنامه تکمیلی جاوا (6)

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت بیست و دوم - معرفی آرایه ها در جاوا

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت بیست و یکم - برنامه تکمیلی جاوا (5)

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت بیستم - معرفی مفهوم وراثت در جاوا

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت نوزدهم - برنامه تکمیلی جاوا (4)

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت هجدهم - معرفی عبارات کنترلی در جاوا

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت هفدهم - برنامه تکمیلی جاوا (2-3)

ادامه مطلب

چهارشنبه 10 آبان 1396

چگونه در برنامه نویسی اندروید ، یک ListView با متن و عکس بسازیم ؟

ادامه مطلب

سه شنبه 09 آبان 1396

چگونه در برنامه نویسی اندروید از فونت شخصی خود استفاده کنیم ؟

ادامه مطلب

سه شنبه 09 آبان 1396

دانلود تمامی نسخه های gradle برای اندروید

ادامه مطلب

آموزش ساخت و شخصی سازی Navigation Drawer در اندروید استودیو

ادامه مطلب

چگونه در برنامه نویسی اندروید ، یک ListView با متن و عکس بسازیم ؟

ادامه مطلب

چگونه در برنامه نویسی اندروید از فونت شخصی خود استفاده کنیم ؟

ادامه مطلب

چگونه در برنامه نویسی اندروید می توان آیدی موبایل را بدست آورد ؟

ادامه مطلب

چگونه در برنامه نویسی اندروید برنامه تماس بسازیم ؟

ادامه مطلب

چگونه در برنامه نویسی اندروید یک منو ساده بسازیم ؟

ادامه مطلب

چگونه در برنامه نویسی اندروید از برنامه اسکرین شات بگیریم ؟

ادامه مطلب

چگونه می توان در اندروید RTL یا LTR صفحه را ثابت کرد ؟

ادامه مطلب

چگونه می توان در اندروید حالت افقی (landscape) را غیر فعال کرد ؟

ادامه مطلب

آموزش استفاده از دیتابیس آماده در پروژه اندرویدی

ادامه مطلب

دانلود سورس کد تمامی نسخه های تلگرام + فایل های نصبی

ادامه مطلب

دانلود کتابخانه GSON برای اندروید + پروژه

ادامه مطلب

دانلود سورس کد اپلیکیشن آموزش زبان انگلیسی + فایل APK

ادامه مطلب

چگونه نگذاریم در آغاز اکتیویتی ، EditText فوکوس را بدست آورد ؟

ادامه مطلب

چگونه کیبورد پیش فرض اندروید (Soft Keyboard) را پنهان کرده یا ببندیم ؟

ادامه مطلب

چرا سرعت مجازی ساز اندروید کم است و چگونه می توان سرعت آنرا افزایش داد ؟

ادامه مطلب

تفاوت بین واحد های اندازه گیری "px" , "dp" , "dip" و "sp" چیست ؟

ادامه مطلب

دانلود سورس کد اپلیکیشن آهنگ سازی برای اندروید + فایل APK

ادامه مطلب

دانلود سورس کد اپلیکیشن هواشناسی برای اندروید + فایل APK

ادامه مطلب

× برای نظر گذاشتن یا پاسخ دادن به سوالات باید در سایت عضو باشید !

برای حمایت از ما روی بنر های زیر کلیک کنید .

برای سفارش تبلیغات به ما ایمیل بزنید .

×

ارتباط با ما