بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
بهترین و نرم ترین Thread (حل شد)
لطفا برای این ویو پیجر که بخواد هر چند ثانیه یک بار عکس عوض شه که نرم و خوب رد بشه و از برنامه نزنه بیرون یه Thread بگید.
public class HomeFragment extends Fragment {
public HomeFragment(){}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
ImageView imgProduct = (ImageView) rootView.findViewById(R.id.imgProduct);
final PageIndicator indicator = (PageIndicator) rootView.findViewById(R.id.indicator);
ArrayList<Integer> imageIds = new ArrayList<Integer>();
ArrayList<String> imageTitles = new ArrayList<String>();
for (int i = 1; i < 15; i++) {
int imageId = G.context.getResources().getIdentifier("image" + i, "drawable", G.context.getPackageName());
imageIds.add(imageId);
imageTitles.add("Nice Nature #" + i);
}
indicator.setIndicatorsCount(14);
ViewPager pager = (ViewPager) rootView.findViewById(R.id.pager);
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int index) {}
@Override
public void onPageScrolled(int startIndex, float percent, int pixel) {
indicator.setPercent(percent);
Log.i("LOG", "Percent: " + startIndex + ", " + percent);
indicator.setCurrentPage(startIndex);
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
ImagePagerAdapter adapter = new ImagePagerAdapter(imageIds, imageTitles);
pager.setAdapter(adapter);
imgProduct.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ProductFragment nextFrag= new ProductFragment();
getFragmentManager().beginTransaction()
.replace(R.id.frame_container, nextFrag)
.addToBackStack(null)
.commit();
}
});
return rootView;
}
}
+2
0
پیشنهاد میکنم از Handler و متد تاخیر دارش استفاده کنید، هر بار که Runnableـِش اجرا میشه دوباره خودش رو صدا بزنه. (11 سال پیش)
0
0
این خوبه؟ میشه کاملش کنید اینو؟ من با متد Hnadler مشکل دارم کلا. (11 سال پیش)
+2
0
هر چیزی یک جایی داره، استاد Thread رو یاد دادن چون واقعا یادگیریش مهمه، ولی برای کار شما باید از TimerTask استفاده کنید نه Thread . (11 سال پیش)
0
0
من از timer هم استفاده کردم ولی بعد چند بار عوض شدن عکس از برنامه میزنه بیرون. انگاری مموری پر بشه ، یه همچین حالتی. پیش یک استاد هم رفتم ولی نتونست کاری کنه واسم . واقعا دیگه نمی دونم چکار کنم. (11 سال پیش)
+1
0
یکسری اطلاعات لازمه تا بگم مشکل از کجاس، سایز(ابعاد) عکس هاتون چند در چنده؟ و در آداپترتون چجوری عکس هارو ست میکنید؟ اگر سایز رو بگید و کد آداپتر رو اضافه کنید شاید مشکل پیدا بشه. (11 سال پیش)
0
0
سایز عکس ها : 540 * 720 و از آداپتر استاد استفاده کردم . (11 سال پیش)
+1
0
دوست عزیز، مگه مشکل بیرون زدن عکس از Timer و Thread هست؟ پس واسه من که از ویوپیجر استفاده میکنم و داینامیک عکسارو از سرور میخونم و نمایش میدم، چرا نمیزنه بیرون؟ اگه از افکت واسه نرم تر شدن اسلایدها استفاده کردین، احتمالا مشکل از اونجا باشه. البته فقط احتمالا (11 سال پیش)
+1
0
احسان جان مشکل از Timer یا Thread نیست، PagerAdapter فرگمنت ها رو توی رم نگه میداره، همین باعث میشه شما با لود کردن عکس های بعدی به مشکل بخوری، پاسخ های من با توجه به سوال بوده و بعد از توضیحاتی که داده شده پاسخ آخرم رو به عنوان نظر در آخرین پاسخ گفتم.به احتمال زیاد شما از Picasso استفاده کردی که خودش مشکل سایز رو هندل میکنه. (11 سال پیش)
0
0
نه من تیتر سوال و توضیحات آقا علی منظورم بود. من از UniversalImageLoader استفاده میکنم. البته قبل از اینکه از این کتابخونه استفاده کنم هم مشکلی توی نمایش عکس ها نداشتم (11 سال پیش)
برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال
علی
11 سال پیش
0
0
private Handler mHandler;
public static final int DELAY = 5000;
Runnable mRunnable = new Runnable()
{
@Override
public void run()
{
//TODO: do something like mViewPager.setCurrentPage(mIterator);
mHandler.postDelayed( mRunnable , DELAY );
}
};
یه مثال > لینک (11 سال پیش)
پاسخ به سوال
علی
11 سال پیش
0
0
public class HomeFragment extends Fragment {
ViewPager mViewPager;
private ImagePagerAdapter mImagePagerAdapter;
public HomeFragment(){}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
ImageView imgProduct = (ImageView) rootView.findViewById(R.id.imgProduct);
final PageIndicator indicator = (PageIndicator) rootView.findViewById(R.id.indicator);
ArrayList<Integer> imageIds = new ArrayList<Integer>();
ArrayList<String> imageTitles = new ArrayList<String>();
for (int i = 1; i < 15; i++) {
int imageId = G.context.getResources().getIdentifier("image" + i, "drawable", G.context.getPackageName());
imageIds.add(imageId);
imageTitles.add("Nice Nature #" + i);
}
indicator.setIndicatorsCount(14);
ViewPager pager = (ViewPager) rootView.findViewById(R.id.pager);
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int index) {}
@Override
public void onPageScrolled(int startIndex, float percent, int pixel) {
indicator.setPercent(percent);
Log.i("LOG", "Percent: " + startIndex + ", " + percent);
indicator.setCurrentPage(startIndex);
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
ImagePagerAdapter adapter = new ImagePagerAdapter(imageIds, imageTitles);
pager.setAdapter(adapter);
imgProduct.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ProductFragment nextFrag= new ProductFragment();
getFragmentManager().beginTransaction()
.replace(R.id.frame_container, nextFrag)
.addToBackStack(null)
.commit();
}
});
return rootView;
}
int page = 0;
Handler handler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handler.post(sendData);
}
@Override
public void onDestroy() {
super.onDestroy();
handler.removeCallbacks(sendData);
}
private final Runnable sendData = new Runnable(){
public void run(){
try {
//prepare and send the data here..
if(page >= mImagePagerAdapter.size()) {
page=0;
}else{
mViewPager.setCurrentItem(page++);
}
handler.postDelayed(this, 1000);
}
catch (Exception e) {
e.printStackTrace();
}
}
};
}
پاسخ به سوال
علی
11 سال پیش
0
0
public class ImagePagerAdapter extends PagerAdapter {
public ArrayList<Integer> imageIds;
public ArrayList<String> imageTitles;
public ImagePagerAdapter(ArrayList<Integer> imageIds, ArrayList<String> imageTitles) {
this.imageIds = imageIds;
this.imageTitles = imageTitles;
}
@Override
public int getCount() {
return imageIds.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = G.layoutInflater.inflate(R.layout.sample, null);
ImageView image = (ImageView) view.findViewById(R.id.image);
image.setImageResource(imageIds.get(position));
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
public int size() {
return imageIds.size();
}
}
حاج حسین نشد بازم . حتی در اکتیویتی هم نشد. کلا از ریشه مشکل داره ! اگر سورس فروشی دارین واسه همین لطفا بدید. کلا داستانشم این باشه که از سرور هر چندتا می خوام بخونه و نمایش بده با یه افکت نرم. و اگر اینترنت قطع بود بعد از اولین باری که خوند دانلود کنه و به صورت آفلاین هم بشه دید. کش هم داشته باشه. اگر این کارو واسه من بکنید واقعا ایول دارید. (11 سال پیش)
سلام دوست عزیز لطفا به این لینک سر بزن شاید مشکلت حل شد
لینک (11 سال پیش)
پاسخ به سوال
علی
11 سال پیش
0
0
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
while (true) {
Thread.sleep(4000);
G.HANDLER.post(new Runnable() {
@Override
public void run() {
if (pager.getCurrentItem() >= adapter.getCount() - 1) {
pager.setCurrentItem(0, true);
} else {
pager.setCurrentItem(pager.getCurrentItem() + 1, true);
}
}
});
}
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start();
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .