۱۳۹۳/۱۲/۲۵, ۰۹:۴۴ ب.ظ
(۱۳۹۳/۱۲/۲۲, ۰۳:۳۹ ق.ظ)'داش بهروز' نوشته: دوست عزیز همون طور که آدمین جان گفت شما اشتباهتون این که توی دستور زیر از شمارنده i استفاده کردید..
کد پیاچپی:bitmap= BitmapFactory.decodeResource(getResources(),imageAdapter.mThumbIds[i]);[/i]
وچون مقدار i برابر صفر بوده در سطح کلاس پس اصولا باید همان عکس اول ارسال شود..حالا چه کنیم.بهترین روش اینه که onpagerLisinerاستفاده کنید..دقت کنید به نظر من بهترین روش چون میشود از روش کوتاه تر استفاده کرد اما توی خیلی موارد و Sdkمختلف ممکن است کار نکند..
ابتدا در سطح اصلی کلاس یه متغییر سراسری مثل زیر بسازید.
کد پیاچپی:[i]int Base_position=0;[/i]
و سپس روی viewPager خودتون یه شنونده pagerLisinear تعریف کنید..این شنونده زمانی صدا زده میشود که صفحه تغییر کند..
کد پیاچپی:[i] viewPag.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
Base_position=position;
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
})
[/i]
در کد بالا چندین متد overrideشده است ..که یکی از این متدها باید بهش توجه کنید متد زیر است
کد پیاچپی:[i]@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
Base_position=position;
}[/i]
این متد یه ورودی position داره که شماره همون صفحه ای است که در آن قرار داریم..داخل بدنه این شماره رو به متغیرBase_position پاس دادیم..
حالا میتونید این متغییر رو جانشین i کنید.
کد پیاچپی:[i]bitmap= BitmapFactory.decodeResource(getResources(),imageAdapter.mThumbIds[Base_position]); [/i]
امیدوارم توضیحات کامل بوده باشه و مشکلتون حل بشه.
ممنون که پاسخم رو دادید.
این روش کار میکنه.
همه ی کار هایی رو که گفتید رو انجام دادم و کدم شو این:
کد پیاچپی:
package com.microprogram.postallcard;
import android.app.ActionBar;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import static com.microprogram.postallcard.R.id.pager;
public class Eshgh_ImageShow extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("عشقولانه");
setContentView(R.layout.activity_eshgh__image_show);
Intent p = getIntent();
Button btn1 = (Button) findViewById(R.id.share);
final ViewPager viewPag = (ViewPager) findViewById(pager);
final int position = p.getExtras().getInt("id");
final Eshgh_Adapter imageAdapter = new Eshgh_Adapter(this);
List<ImageView> images = new ArrayList<ImageView>();
for (int i = 0; i < imageAdapter.getCount(); i++){
ImageView imageView= new ImageView (this);
imageView.setImageResource(imageAdapter.mThumbIds[i]);
imageView.setScaleType(ImageView.ScaleType.CENTER);
images.add(imageView);
}
ImagePagerAdapter pagerAdapter = new ImagePagerAdapter(images);
viewPag.setAdapter(pagerAdapter);
viewPag.setCurrentItem(position);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_eshgh__image_show, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent p = getIntent();
int position = p.getExtras().getInt("id");
ViewPager viewPag = (ViewPager) findViewById(pager);
Eshgh_Adapter imageAdapter = new Eshgh_Adapter(this);
switch (item.getItemId()) {
case R.id.share:
viewPag.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
int Base_position=0;
public void onPageSelected(int position) {
Base_position = position; }
});
Bitmap bitmap;
OutputStream output;
Intent share;
bitmap= BitmapFactory.decodeResource(getResources(),imageAdapter.mThumbIds[Base_position]);
File filepath = Environment.getExternalStorageDirectory();
File dir = new File (filepath.getAbsolutePath() + "/.PostallCard/");
dir.mkdirs();
File file = new File(dir, "Eshgh.png");
try {
share = new Intent(Intent.ACTION_SEND);
share.setType("image/jpeg");
output = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
output.flush();
output.close();
Uri uri = Uri.fromFile(file);
share.putExtra(Intent.EXTRA_STREAM,uri);
startActivity(Intent.createChooser(share, "Share Image"));
}
catch(Exception e){
e.printStackTrace();
}
return true;
case R.id.favorite:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
چون در این حالتی که من گذاشتم
کد پیاچپی:
bitmap= BitmapFactory.decodeResource(getResources(),imageAdapter.mThumbIds[Base_position]);
همه راه هایی رو که میتونستم امتحان کردم ولی بازم نشد.
یه بارم کد اشتراک گذاری رو توی این قسمت کذاشتم همه چیز درست بود ولی مشکل این جا بود که هر وقت صفحه رو عوض میکردم صفحه اشتراک گذاری باز میشد:
کد پیاچپی:
public void onPageSelected(int position) {
Base_position = position;
}