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

عوض نشدن دایره توپر در پروژه اسلایدر (حل نشده) لطفا کمک کنید

Shadow  10 سال پیش  9 سال پیش
+2 0

دوستان من قدم به قدم پیش رفتم توی قسمتای آخر که باید با عوض کردن عکس دایره توپر جای دایره توخالی رو بگیره مشکل دارم مال من عوض نمیشه من کدها رو می زارم لطفا مشکل رو بفرمایید:

 public class PageIndicator extends ImageView {

private Paint fillpaint;
private Paint strokpaint;
private int count;
private int indecatorWidth;
private static final int CIRCLE_RADIUS = 10;
private static final int CIRCLE_SPACE = 10;
private int screenWidth;
private float offsetX;
private int currentPageIndex;


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


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


public PageIndicator(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initialize();
}


private void initialize() {
fillpaint = new Paint();
fillpaint.setStyle(Style.FILL);
fillpaint.setColor(Color.GREEN);
fillpaint.setAntiAlias(true);

strokpaint = new Paint();
strokpaint.setStyle(Style.STROKE);
strokpaint.setColor(Color.GREEN);
strokpaint.setAntiAlias(true);
screenWidth = G.context.getResources().getDisplayMetrics().widthPixels;

}


public void setIndecatorCoutn(int value) {
count = value;
comuteIndecatorWidth();
}


public void setCurrentPage(int value) {
currentPageIndex = value;
}


@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

for (int i = 0; i < count; i++) {
Paint paint = strokpaint;
if (i == currentPageIndex) {
paint = fillpaint;
}
canvas.drawCircle(offsetX + i * (CIRCLE_RADIUS + CIRCLE_SPACE), 10, CIRCLE_RADIUS / 2.0f, paint);
}

}


private void comuteIndecatorWidth() {
indecatorWidth = count * (CIRCLE_RADIUS + CIRCLE_SPACE);
offsetX = (screenWidth - indecatorWidth) / 2;

}
}
///////////////////////////////////////////////////////////////////////////////
 public class Splash extends FragmentActivity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
final PageIndicator indecater = (PageIndicator) findViewById(R.id.indicater);
ArrayList<Integer> imageIds = new ArrayList<Integer>();
for (int i = 1; i < 8; i++) {
int imageId = G.context.getResources().getIdentifier("image" + i, "drawable", G.context.getPackageName());
imageIds.add(imageId);
}
indecater.setIndecatorCoutn(7);

ViewPager pager = (ViewPager) findViewById(R.id.pager);
pager.setOnPageChangeListener(new OnPageChangeListener() {

@Override
public void onPageSelected(int index) {

}


@Override
public void onPageScrolled(int index, float arg1, int arg2) {
// TODO Auto-generated method stub
indecater.setCurrentPage(index);

}


@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub

}
});
ImagePagerAdapter adapter = new ImagePagerAdapter(imageIds);
pager.setAdapter(adapter);

}
}
//////////////////////////////////////////////////////////////////////////
 public class ImagePagerAdapter extends PagerAdapter {

public ArrayList<Integer> imageIds;


public ImagePagerAdapter(ArrayList<Integer> strings) {
this.imageIds = strings;

}


@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 img = (ImageView) view.findViewById(R.id.image);
img.setImageResource(imageIds.get(position));
container.addView(view);
return view;
}


@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}

0 0
لطفا جواب بدهید؟! (10 سال پیش)
+2 0
توی سورس متد invalidate رو باید صدا کنید . (10 سال پیش)
+1 0
ببخشید منظورتون رو نفهمیدم آقای کاشی زاده کجا باید این متد رو صدا بزنم من که این متد رو ندارم (10 سال پیش)
+1 0
در آموزش ها استاد به این موضوع اشاره دارند ولی در سورس این خط کد پاک شده ، طبق آموزش پیش برید متوجه خواهید شد. (10 سال پیش)
0 0
من سورس استاد رو با خودم مقایسه کردم همچین متدی اصلا وجود نداره (10 سال پیش)
+2 0
عرض کردم در سورس استاد این متد حذف شده ولی توی ویدئو ها به این موضوع اشاره شده متد invalidate کارش این هست که یکبار ویو شما رو از اول رندر میکنه درآخر متد setCurrentPage این متد رو صدا بزنید درست میشه . (10 سال پیش)
0 0
ببخشید من اشتباه متوجه شدم خیلی ممنون (10 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
Shadow  10 سال پیش
0 0

الان من این متد رو اضافه کردم ولی هیچ اتفاقی نیفتاد ببخشید دیگه تازه کاریم ؟!

 public class PageIndicator extends ImageView {

private Paint fillpaint;
private Paint strokpaint;
private int count;
private int indecatorWidth;
private static final int CIRCLE_RADIUS = 10;
private static final int CIRCLE_SPACE = 10;
private int screenWidth;
private float offsetX;
private int currentPageIndex;


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


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


public PageIndicator(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initialize();
}


private void initialize() {
fillpaint = new Paint();
fillpaint.setStyle(Style.FILL);
fillpaint.setColor(Color.GREEN);
fillpaint.setAntiAlias(true);

strokpaint = new Paint();
strokpaint.setStyle(Style.STROKE);
strokpaint.setColor(Color.GREEN);
strokpaint.setAntiAlias(true);
screenWidth = G.context.getResources().getDisplayMetrics().widthPixels;

}


public void setIndecatorCoutn(int value) {
count = value;
comuteIndecatorWidth();
}


public void setCurrentPage(int value) {
currentPageIndex = value;

}


@Override
public void invalidate() {
// TODO Auto-generated method stub
super.invalidate();
}


@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

for (int i = 0; i < count; i++) {
Paint paint = strokpaint;
if (i == currentPageIndex) {
paint = fillpaint;
}
canvas.drawCircle(offsetX + i * (CIRCLE_RADIUS + CIRCLE_SPACE), 10, CIRCLE_RADIUS / 2.0f, paint);
}

}


private void comuteIndecatorWidth() {
indecatorWidth = count * (CIRCLE_RADIUS + CIRCLE_SPACE);
offsetX = (screenWidth - indecatorWidth) / 2;

}
}
+1 0
عرض کردم داخل متد setCurrentPage متد invalidate رو صدا بزنید . (10 سال پیش)
پاسخ به سوال 
خواست خدایی  10 سال پیش
+4 0

از اونجا که این مشکل رو منم قبلا داشتم و استاد تو توضیحاتشون چیزی در موردش نمی گن و فقط یه لحظه میبینی نوشته شده اینو گذاشتم برا بقیه دوستان چون فک کنم مشکل شما حل شده

  public void setCurrentPage(int value) {
currentPageIndex = value;
invalidate();
}
0 0
دقیقا مشکل همین جاست و با اضافه کردن این تابع کار درست میشه مرسی از راهنماییتون (9 سال پیش)
پاسخ به سوال 
114105  9 سال پیش
0 0

دوستان برای بنده این مشکل پیش اومده

متد invalidate  رو میتونید اینجا بذارید

0 0
دقیقا کدهای استاد رو زدم همه چی هم کار میکنه به جز اینکه موقع عوض کردن ثابته دایره ها (9 سال پیش)
0 0
دوست عزیز دقیقا تو پست بالای این پست اون متد گذاشته شده (9 سال پیش)
0 0
اونم اضافه میکنم اما کار نمیکنه (9 سال پیش)

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