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

لطفا راهنمائی کنید . قرار دادن فایل gif در برنامه

hpanahpour  10 سال پیش  10 سال پیش
0 0

با سلام

این دومین پست من در مورد قرار دادن فایل gif هست.

خواهش می کنم دوستان راهنمائی کنن

البته من از اینترنت ، کدهای رو هم پیدا کردم که می تونه فایل gif رو نمایش بده ولی متاسفانه دیگه تو اون صفحه چیزهای دیگه مثل Text یا List و ... رو نشون نمی ده و فقط یه فایل gif نمایش داده میشه .

کد فایل دانلود شده اینه :

package app.app.test.gif;

import java.io.InputStream;

import android.app.Activity;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Movie;

import android.os.Bundle;

import android.view.View;

// public class GifActivity extends Activity {

public class gifOperation extends Activity {

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

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(new GIFView(this));

    }

    private static class GIFView extends View {

        private static Movie movie;

        InputStream          is = null;

        long                 moviestart;

        public GIFView(Context context) {

            super(context);

            is = context.getResources().openRawResource(R.drawable.bg);

            movie = Movie.decodeStream(is);

        }

        @Override

        protected void onDraw(Canvas canvas) {

            super.onDraw(canvas);

            long now = android.os.SystemClock.uptimeMillis();

            if (moviestart == 0) {

                moviestart = now;

            }

            int relTime = (int) ((now - moviestart) % movie.duration());

            movie.setTime(relTime);

            movie.draw(canvas, 200, 200);

            this.invalidate();

        }

    }

}

با تشکر

+1 0
در محیط IDE نشون نمیده مال منم اینطوریه!وقتی اجرا بشه مشکل حل میشه! ولی خب اگه خواستی یه عکس از اون چیزی که میخوای طراحی کنی بده تا بتونم کدشو بهت بدم :D (10 سال پیش)
0 0
با سلام و تشکر از جواب شما (10 سال پیش)
 برای این سوال 6 پاسخ وجود دارد.
پاسخ به سوال 
hpanahpour  10 سال پیش
0 0

با سلام و تشکر از جواب شما

وقتی کد بالا رو میزنم فایل gif کامل اجرا میشه ولی بقیه آیتم ها رو نشون نمی ده

بطور مثال تو عکس زیر فایل gif مشخص شده و اجرا میشه ولی متن Text نمایش داده نمیشه

پاسخ به سوال 
Plumber  10 سال پیش
+4 0

سلام...

اول اینکه پیشنهاد میکنم کد هارو توی تگ <> ادیتور سایت بذاری تا مرتب تر نشون داده بشه که قابل فهم بشه :D

بعد اینکه دوست عزیز این روشو قبلا هم یبار برای شما گفتم اگه اشتباه نکنم،گفتم برای خودم جواب داده ...

شما ابتدا یه کلاس میسازی به نام PlayGifView با این محتویات:

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;

public class PlayGifView extends View{


    private static final int DEFAULT_MOVIEW_DURATION = 1000;

    private int mMovieResourceId;
    private Movie mMovie;

    private long mMovieStart = 0;
    private int mCurrentAnimationTime = 0;

    @SuppressLint("NewApi")
    public PlayGifView(Context context, AttributeSet attrs) {
        super(context, attrs);

        /**
         * Starting from HONEYCOMB have to turn off HardWare acceleration to draw
         * Movie on Canvas.
         */
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        }
    }

    public void setImageResource(int mvId){
        this.mMovieResourceId = mvId;
        mMovie = Movie.decodeStream(getResources().openRawResource(mMovieResourceId));
        requestLayout();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if(mMovie != null){
            setMeasuredDimension(mMovie.width(), mMovie.height());
        }else{
            setMeasuredDimension(getSuggestedMinimumWidth(), getSuggestedMinimumHeight());
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        if (mMovie != null){
            updateAnimtionTime();
            drawGif(canvas);
            invalidate();
        }else{
            drawGif(canvas);
        }
    }

    private void updateAnimtionTime() {
        long now = android.os.SystemClock.uptimeMillis();

        if (mMovieStart == 0) {
            mMovieStart = now;
        }
        int dur = mMovie.duration();
        if (dur == 0) {
            dur = DEFAULT_MOVIEW_DURATION;
        }
        mCurrentAnimationTime = (int) ((now - mMovieStart) % dur);
    }

    private void drawGif(Canvas canvas) {
        mMovie.setTime(mCurrentAnimationTime);
        mMovie.draw(canvas, 0, 0);
        canvas.restore();
    }

}

این کد رو توی لایه xml : 

   //your_package_name = esme package!
<your_package_name.PlayGifView android:id="@+id/viewGif" android:layout_width="48dip" android:layout_height="48dip" android:layout_gravity="center" />

**بعد از اضافه کردن این کد ممکنه لایه xml بد نشون داده بشه که مهم نیست موقع اجرا مشکل حل میشه!**

داخل فایل جاوا هم از این کد برای معرفی فایل گیف:

//niazi nist chizi taghir kone 
PlayGifView pGif = (PlayGifView) findViewById(R.id.viewGif);
//your_gif_file = file gif dakhele pooshe drawable! pGif.setImageResource(R.drawable.your_gif_file);

امیدوارم به دردت بخوره...موفق باشی :)

0 0
با سلام و تشکر از پاسخ خوب شما... (10 سال پیش)
پاسخ به سوال 
hpanahpour  10 سال پیش
0 0

با سلام

من تمام توضیحات شما رو با دقت انجام دادم

ابتدا یک فایل جدید ساختم بنام gif_test

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

مرحله سوم کد xml رو کپی و نام پکیج رو قرار دادم

و در مرحله آخر کد جاوا رو به اکتیویتی برنامه "Gif_testActivity" اضافه کردم

متاسفانه یک خطای گرفت که نتونستم رفعش کنم .

باید یادآوری کنم که توضیحات شما فوق العاده است ولی من توانائی برنامه نویسی کمی دارم . بنابراین از شما کمال تشکر رو دارم 

 

با تشکر

 

 

+1 0
شما احتمالا قسمت target را ندارین یا نسخه پایینی را براش انتخام کردین و این کلاس ها داخلش تعرف نشده فکر کنم target را روی 19 به بالا بزاری حل بشه البته باید اندروید برنامت را هم با همین نسخه یا بالاتر انتخاب کنی (10 سال پیش)
0 0
target ?چی هست و چجوری میشه تهیه کنم ؟ (10 سال پیش)
پاسخ به سوال 
hpanahpour  10 سال پیش
0 0

target   ؟ چی هست و چجوری می تونم تهیه کنم

 

پاسخ به سوال 
Criss  10 سال پیش
+2 0

این پروژه ایی هست که خیلی وقت پیش نوشته بودم ، یک سری کدها و قسمت های اضافی داره ولی به خوبی GIF رو لود میکنه ، میتونید نمونه اش رو از اینجا دانلود کنید

از WebView استفاده شده <

این ActivityMain هست فقط باید اسم پکیج مناسب بزارید :

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.Toast;


public class ActivityMain extends Activity {

private int count = 0;
private WebView myWeb;
private ImageView img;
private String result;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

myWeb = (WebView) findViewById(R.id.webView1);
img = (ImageView) findViewById(R.id.img);

myWeb.getSettings().setPluginsEnabled(true);
myWeb.getSettings().setAppCacheEnabled(true);
myWeb.getSettings().setJavaScriptEnabled(true);
myWeb.getSettings().setDomStorageEnabled(true);

HttpClient client = new DefaultHttpClient();
HttpGet method = new HttpGet("http://sevenmail.persiangig.com/Android/Project/GIF/_sum.int");
HttpResponse response;
try {
response = client.execute(method);
int code = response.getStatusLine().getStatusCode();
Log.i("LOG", "Code : " + code);
InputStream stream;
stream = response.getEntity().getContent();
result = InputStreamToString(stream);
if (result == null) {
result = "1000";
} else {
result = result.substring(result.length() - 3, result.length());
}
Log.i("LOG", "Html Value : " + result);
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
catch (IllegalStateException e) {
e.printStackTrace();
}

img.setAlpha(25);
myWeb.loadData("<html><center><h1>Click Me</h1><center></html>", "text/html", "UTF-8");

img.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
load();
}

});
}


private void load() {
count++;
Log.i("LOG", "" + count);
String html = "<html>" +
"<head>" +
"<center><img src='http://sevenmail.persiangig.com/Android/Project/GIF/file%20%28" + count + "%29.gif'/img>" +
"</head>" +
"<body>" +
"</br>" + count + " of " + result + "</center>" +
"</body>" +
"</html>";

myWeb.loadData(html, "text/html", "UTF-8");

myWeb.setWebViewClient(new WebViewClient() {

@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
Toast.makeText(ActivityMain.this, "LOADING", Toast.LENGTH_SHORT).show();
}


@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Toast.makeText(ActivityMain.this, "FINISH", Toast.LENGTH_SHORT).show();
}


@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(ActivityMain.this, "ERROR", Toast.LENGTH_SHORT).show();
}
});
}


@Override
public void onBackPressed() {
if (count >= 1) {
count--;
}
Log.i("LOG_B", "" + count);
if (myWeb.canGoBack()) {
myWeb.goBack();
}
}


private String InputStreamToString(InputStream inputStream) {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder builder = new StringBuilder();
try {
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
return builder.toString();
}
catch (IOException e) {
e.printStackTrace();
}
return "";
}

}

این هم لایه main.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dip"
android:orientation="vertical" android:layout_weight="1">

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >


<WebView
android:id="@+id/webView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />


<ImageView
android:id="@+id/img"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="centerInside"
android:src="@drawable/ic_launcher"/>

</RelativeLayout>
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

</LinearLayout>

</LinearLayout>

پرمیژن ریز رو هم فراموش نکنید :

  <uses-permission android:name="android.permission.INTERNET" />

 

0 0
سلام خیلی متشکر از برنامه خوبتون امکان داره سورس فایل را بصورت زیپ شده بفرستید لینک ارسالی شما رو موبایل خوب جواب میده ولی کد ارسالی شما رو نتونستم رو برنامه Eclips اجرا کنم (10 سال پیش)
پاسخ به سوال 
hpanahpour  10 سال پیش
0 0

با سلام

دوست عزیز کد پرمیژن رو کجا باید قرار بدم ؟

+1 0
با کسب اجازه از اساتید سوال آخری خیلی سخته بزا من ج بدم . پرمیژن رو توی فایل Manifest قرار بدید بعد از دستور android:versionName موفق باشید . (10 سال پیش)

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