۱۳۹۳/۱۲/۲۱, ۰۸:۳۲ ب.ظ
سلام میخواستم بدونم چطوری میشه یه متغییر رو در سطح کلاس نوشت که مقدارش رو از onPageChangeListener بگیره؟ (که اون مقدار آدرس drawable عکسی باشه که تو اون صفحه است)
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.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();
int position = p.getExtras().getInt("id");
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);
ViewPager viewPag = (ViewPager) findViewById(pager);
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");
int i = 0;
Eshgh_Adapter imageAdapter = new Eshgh_Adapter(this);
switch (item.getItemId()) {
case R.id.share:
Bitmap bitmap;
OutputStream output;
Intent share;
bitmap= BitmapFactory.decodeResource(getResources(),imageAdapter.mThumbIds[i]);
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[i]);
imageAdapter.mThumbIds[i]
int i = 0;
imageAdapter.mThumbIds[position]
bitmap= BitmapFactory.decodeResource(getResources(),imageAdapter.mThumbIds[i]);
int Base_position=0;
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
}
})
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
Base_position=position;
}
bitmap= BitmapFactory.decodeResource(getResources(),imageAdapter.mThumbIds[Base_position]);
(۱۳۹۳/۱۲/۲۲, ۰۳:۳۹ ق.ظ)'داش بهروز' نوشته: [ -> ]دوست عزیز همون طور که آدمین جان گفت شما اشتباهتون این که توی دستور زیر از شمارنده 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;
}
public class Eshgh_ImageShow extends ActionBarActivity {
int Base_position=0;//به صورت سراسری
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("عشقولانه");
//کل کدهای ویو پیجر بیار اینجا بنویس.
}