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

استفاده از Gif (حل شد)

ATRAS  11 سال پیش  10 سال پیش
+20 0

سلام دوستان.چجوری میتونم یک عکس gifکه متحرک است رو در برناممون نمایش بدیم.خواهشا کامل توضیح بدین.واقعا احتیاج دارم.

0 0
دوست عزیز قبلا مطرح شده حداقل دوبار ، جستی انجام بدید :) (11 سال پیش)
0 0
گشتم عزیز که مطرح کردم ولی یکی دوتا تاپیکه که آخرشم روش استفاده از گیفو توضیح نداده کسی فقط گفتن میشه به عنوان یک عکس ثابت استفاده کرد. (11 سال پیش)
0 0
دوستان یکی یه فکری به حال ما کنه:-( (11 سال پیش)
+1 0
من از WebView استفاده کردم و برای نمایش فایل gif لینک مستقیم از سرور دادم _ و هنوز نمیدونم چطور میشه فایل رو از روی گوشی معرفی کرد ! (11 سال پیش)
0 0
(11 سال پیش)
+2 0
واقعا من این همه تو انجمن بودم تا حالا یک اموزش درست حسابی برای گذاشتنgifکسی نذاشته.اگه یکی از دوستان بلده بگه:) (11 سال پیش)
0 0
آره خداییش میدونین چقد ظاهر برنامه با یک gif تغییر میکنه.کلی آدمو تو گرافیک جلو میندازه. (11 سال پیش)
0 0
استفاده از gif کمی پروسه می گیره و توی لیست ویو یا به تعداد زیاد پیشنهاد نمی شه (11 سال پیش)
+1 0
منم اون 2 تا تاپیک رو دیده بودم ولی روش هایی که دوستان گفته بودن هیچ کدوم کار نمیکرد، از وب ویو استفاده کردم ولی چون عکس من سایزش بزرگتر از وب ویو بود عکس رو جالب نشون نمیداد. باز اگر کسی ایده ای داره که قبلا انجام داده ما استقبال میکنیم. (11 سال پیش)
0 0
(11 سال پیش)
+5 0
بچه ها یه همت کنید یه کاستوم گیف ایمیج ویو بنویسید ! ، همه چی رو که نباید از اجنبی ها کپی کنیم ! (11 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
ATRAS  11 سال پیش
+6 0

دوستان من یه چیزایی پیدا کردم که البته gif پخش نمیکنه چون جالب بود این جا بیان کردم.  شما چندتا عکس میدین که اون تبدیل به gif میکنه و در یک imageview نمایش میده.میتونین از این لینک کدو ببینین من امتحان کردم جالب بود.راستی کد هایی که بعد از Answer6 به بعده رو استفاده کنین.دقت کنین هر سه بخشی که کد هستو به ترتیب باید استفاده  کنین.

0 0
استاد تا آنلاینین یه فکری به حال این سوال من کنین.ممنون. (11 سال پیش)
+1 0
متاسفانه وقت نمی کنم، در اولین فرصت جمطلب رو می ذارم (11 سال پیش)
0 0
دوستان بالاخره کسی نتونست این مشکلو حل کنه؟ (11 سال پیش)
0 0
(11 سال پیش)
+1 0
منم خیلی لازم دارم ... کمک کنید لطفا (11 سال پیش)
0 0
این جواب داد من چهار تا عکس گذاشتم، و نشون داد اما یه سوال اینکه اگه فقط یبار بخواییم عکس اجرا بشه، یعنی هر عکس رو فقط یبار نشون بده باید چیکار کنیم؟ (10 سال پیش)
پاسخ به سوال 
Criss  11 سال پیش
+15 0

خب امروز یک روز تعطیل هست (این روز رو به تمامی شیعیان تسلیت میگم) وقتی شد که کمی سرچ کنم و جواب این رو پیدا کنم

برای نمایش دادن یک عنصر متحرک 2 روش پیدا کردم :

1.تمامی فریم ها یکی باشند مانند فایل  Gif (منبع)

2. فریم هارو جدا جدا در اختیار داشته باشیم < این روش هم توی پست بالا تر گفته شده و منبعش هم همون هست <

خب اول مورد 1 رو توضیح میدم و سورس ها نمایش فایل Gif رو میزارم که ساده تر هم هست <

+پروژه رو میتونید با اسم (Gif2viewActivity) بسازید

+قبل از هر چیز یک فایل Gif رو درون فولدر asset بزارید

+کلاس زیر رو ایجاد کنید (GifMovieView)

import java.io.InputStream;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Movie;
import android.os.SystemClock;
import android.view.View;


public class GifMovieView extends View {

private Movie mMovie;
private long mMoviestart;


public GifMovieView(Context context, InputStream stream) {
super(context);
InputStream mStream = stream;
mMovie = Movie.decodeStream(mStream);
}


@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT);
super.onDraw(canvas);
final long now = SystemClock.uptimeMillis();
if (mMoviestart == 0) {
mMoviestart = now;
}
//انتهای خط زیر هم +1 اضاف شده ، چون وقتی سورس رو تست میکردم اررور میداد و تقسیم بر صفر انجام میشد
final int relTime = (int) ((now - mMoviestart) % (mMovie.duration() + 1));
mMovie.setTime(relTime);
//اینجا من 0و0 گذاشتم ، ولی لازم هست که بصورت حرفه ای تر درون یک ایمیج ویو نمایش داده بشه
mMovie.draw(canvas, 0, 0);
this.invalidate();

}

}

 +برای اکتیویتی اصلی یا همون (Gif2viewActivity) کد زیر رو قرار بدید

import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.os.Bundle;


public class Gif2viewActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
InputStream stream = null;
try {
stream = getAssets().open("new.gif");
}
catch (IOException e) {
e.printStackTrace();
}
GifMovieView view = new GifMovieView(this, stream);
setContentView(view);

}
}

شما میتونید هر تعداد می خواهید فایل Gif درون فولدر asset قرار بدید و برای نمایش استفاده کنید <

فعلا تنها مشکلی که داره این هست که اگر فایل شما از اسکرین بزرگتر باشه < از سمت راست و پایین بیرون میزنه < که برای حل این مشکل میتونید آموزش های CustomControl هارو ببینید و فایل Gif رو درون یک ImageView نمایش بدید (البته هنوز تست نکردم و مطمئن نیستم!)

 .

.

.

فعلا دارم این مورد رو روی یک Spinner تست میکنم نتیجه رو بعدا ارایه میدم و همچنین روش اول رو هم توضیح میدم

+2 0
خدا خیرت بده واقعا تو این روز بزرگترین سوابو کردی criss جان.حالا باید یه بار تست میکنم تا دقیق متوجه موضوع بشم.راستی در مورد روش دوم که به صورت فریم به فریم نمایش بده من بالا تر توضیحشو دادم و لینکشم گذاشتم میتونن دوستان استفاده کنن. (11 سال پیش)
+1 0
اره فکر کنم نیازی نباشه اون روش رو توضیح بدم < خب من کلی تست کردم که بشه با کلیک کردن روی یک باتن عکس های جیف رو در ویو عوض کرد که سورس رو در زیر میزارم ، اما فکر نکنم حرفه ایی باشه ! (11 سال پیش)
+2 0
دمت گرم، من قول داده بودم، اما هم وقت نمی کردم و هم آموزش ما کاملتر و بهینه تره (11 سال پیش)
0 0
لطفا کمک میکنید که چطوری اینو توی یه ImageView نشون بدیم؟ (11 سال پیش)
پاسخ به سوال 
Criss  11 سال پیش
+9 0

خب کد بالا رو کمی ویرایش کردم و نتیجه بصورت زیر  تغییر کرد و باعث میشه کمی داینامیک باشه .

تجربه ایی که کسب شد < خیلی از فایل های gif به درستی روی View نشون داده نمیشه(بهتره در آینده روشهای دیگه هم تست بشه) < امولاتور (BlueStacks) سی پی یو رو 100% پر میکنه !

+دو فایل Gif در asset قرار دهید (new.gif,two.gif)

+یک فایل xml به نام gifview.xml درست کنید و هیچ کدی لازم نیست بهش اضاف کنید

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

</LinearLayout>

+به پروژه قبلی یک کلاس اضاف کنید (CustomSpiner)  بهتره آموزش های بخش 13 رو دیده باشید بهتر متوجه میشید <قراره از این اسپینر به عنوان ویو استفاده بشه تا بتونیم  دستور خط زیر رو که در کلاس main اجرا میشه و برای نمایش از View اصلی ما استفاده میکنه جدا باشه و بتونیم عناصر روی UI به درستی تفکیک کنیم

setContentView(view);

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

import android.content.Context;
import android.util.AttributeSet;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;


public class CustomSpiner extends LinearLayout {

@Override
protected void onCreateContextMenu(ContextMenu menu) {
super.onCreateContextMenu(menu);
}


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


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


private void initialize(Context context) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.gifview, this, true);

}

}

 

+کلاس Gif2viewActivity رو به صورت زیر تغییر میدیم (سورس نوشته شده تست هست که نشون میده میتونید با کلیک کردن فایل gif رو در ویو تغییر بدید_منظورم اینه که بجای استفاده از If میتونید دستور رو خیلی دانامیک تر بنویسید) یک باتن هم به فایل main.xml اضاف کنید_برای اسپینر هم یک ID تعریف کنید

import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class Gif2viewActivity extends Activity {

InputStream stream = null;
CustomSpiner spiner1;
String name = "two.gif";


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
spiner1 = (CustomSpiner) findViewById(R.id.Spiner1);
Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
if (name.equals("new.gif")) {
name = "two.gif";
} else {
name = "new.gif";
}
try {
stream = getAssets().open(name);
run();
}
catch (IOException e) {
e.printStackTrace();
}
}
});

}


private void run() {

GifMovieView view = new GifMovieView(this, stream);
//setContentView(view);
spiner1.removeAllViews();
//تعیین اندازه ویو برای اسپینر
spiner1.addView(view, 350, 350);
}

}

+کلاس GifMovieView هم بصورت زیر تغییر میکنه (در واقع چون فایل gif با کلیک شدن از asset دریافت میشه در ابتدای شروع برنامه که هنوز کلیکی صورت نگرفته مقدار Stream برابر null هست و باعث کرش میشد) که بصورت زیر تغییر میدیم

import java.io.InputStream;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Movie;
import android.os.SystemClock;
import android.view.View;


public class GifMovieView extends View {

private Movie mMovie;
private long mMoviestart;


public GifMovieView(Context context, InputStream stream) {
super(context);
InputStream mStream = stream;
if (mStream != null) {
mMovie = Movie.decodeStream(mStream);
}
}


@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT);
super.onDraw(canvas);
final long now = SystemClock.uptimeMillis();
if (mMoviestart == 0) {
mMoviestart = now;
}
if (mMovie != null) {
final int relTime = (int) ((now - mMoviestart) % (mMovie.duration() + 1));
mMovie.setTime(relTime);
mMovie.draw(canvas, 0, 0);
this.invalidate();
}
}

}

 حالا با کلیک کردن روی باتن < فایل درخواستی شما در ویو نمایش داده میشه

 


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