آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

SurfaceView چیست ؟

Criss  11 سال پیش  11 سال پیش
+3 0

سلام دوستان من دارم دنبال آموزشی میگردم که بشه SpritSheet هارو درون اندروید ازشون استافده کرد (از روش اصولی)<

با استفاده از XML و همچنین THREAD و یا CANVAS میشه اینکار رو کرد < اما باید تمام SHEET هارو جداگانه سیو کرد <

حالا من توی این بین که دارم سرچ میکنم یک موردی رو دیدم که نمیدونم چی هست ؟ < چند جا دیدم که استفاده شده ازش <

مثلا یک نمونه :

 publicclass GameView extends SurfaceView
  {

حالا این چی هست ؟

 

 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
Criss  11 سال پیش
+3 0

خب تقریبا متوجه شدم چی هست <

به این دو سورس نگاه کنید متوجه میشید <

Step 1 priting with onDraw using View

 

package com.edu4java.android.killthemall;

import android.app.Activity;

import android.os.Bundle;

import android.view.Window;



public class Main extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(new GameView(this));

}

}

package com.edu4java.android.killthemall;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.view.View;

public class GameView extends View {

private Bitmap bmp;



public GameView(Context context) {

super(context);

bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon);

}

@Override

protected void onDraw(Canvas canvas) {

canvas.drawColor(Color.BLACK);

canvas.drawBitmap(bmp, 10, 10, null);

}

}

 

Step 1 priting with onDraw using SurfaceView

   public class GameView extends SurfaceView {

private Bitmap bmp;

private SurfaceHolder holder;



public GameView(Context context) {

super(context);

holder = getHolder();

holder.addCallback(new SurfaceHolder.Callback() {



@Override

public void surfaceDestroyed(SurfaceHolder holder) {

}



@Override

public void surfaceCreated(SurfaceHolder holder) {

Canvas c = holder.lockCanvas(null);

onDraw(c);

holder.unlockCanvasAndPost(c);

}



@Override

public void surfaceChanged(SurfaceHolder holder, int format,

int width, int height) {

}

});

bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon);

}



@Override

protected void onDraw(Canvas canvas) {

canvas.drawColor(Color.BLACK);

canvas.drawBitmap(bmp, 10, 10, null);

}

}

 

اینم نتیجه هر دو سورس

http://www.edu4java.com/_img/game1.png

 

 

0 0
چرا کد SurfaceView روی پروژه خروجی نمیده و برنامه کرش میکنه < تمام کانستراکتور ها رو هم ایمپورت کردم < ImageVIew رو توی کلاس جداگانه طبق اموزش های استاد نمایش دادم < اما این SurfaceView رو نمیشه نمایش داد (11 سال پیش)
0 0
متوجه شدم مشکل از setContentView(R.layout.main); هست این قسمت رو که کامنت میکنم مشکل رفع میشه < از کلاس mainactivity هست < کلاس imageview و Furfaceview مشکلی ندارند (11 سال پیش)
0 0
خخخخ . هرچی سوال مینویسی آخرش خودت جواب میدی ! خیلی باحاله ! (11 سال پیش)
+1 0
نه بابا هنوز مشکلم حل نشده ! این دومی اصلا نشون داده نمیشه ! برنامه کرش میکنه ! (11 سال پیش)
0 0
خب آره . ولی بلاخره آخرش خودت این سوال رو هم حلش میکنی :))) (11 سال پیش)
پاسخ به سوال 
Criss  11 سال پیش
0 0

سلام به همه <

مشکل این هست که سورس دومی که بالا گذاشتم مشکل داره <

برای سورس اولی من با توجه به آموزش های استاد تغییرات کوچکی دادم و روی main.xml نشونش دادم <

سورس بصورت زیر :

 package com.freestyler.Bitmap.criss;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.ImageView;


public class imageView extends ImageView {

private Bitmap bmp;


public imageView(Context context) {
super(context);
initialize(context);
}


public imageView(Context context, AttributeSet attrs) {
super(context, attrs);
initialize(context);
}


public imageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initialize(context);
}


private void initialize(Context context) {

}


@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
}


@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

canvas.drawColor(Color.BLACK);
canvas.drawBitmap(bmp, 100, 100, null);
}
}

اما برای قسمت دوم هر کاری میکنم اصلا چیزی نشون داده نمیشه !

هر سه کانستراکتور رو هم تعریف کردم < ondraw هم صدا زدم ! invalidate  و postinvalidate هم تست زدم < هیچ کدوم جواب نمیداد !

چطور میشه یک surfaceview روی main.xml نشون داد ؟

این هم منبعی که دارم ازش استفاده میکنم ؟

 

پاسخ به سوال 
Criss  11 سال پیش
0 0

من دقت کردم دیدم کانستراکنتور های ImageView و SurfaceView دقیقا عین هم هستن!

منم عین imageView سورس ها رو برای SurfaceVIew گذاشتم

بعد از تعریف کانستراکتورها initialise و onlayou و ondraw رو برای SurfaceView عین ImageView گذاشتم < برنامه اجرا میشه کرش نمیکنه !

روی xml گرافیکال درون اکلیپس همه چیز رو خوب نشون میده اما روی امولاتور برای surfaceView چیزی نشون نمیده !


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .