现在,我想要发生的是当我点击当前视图左侧或右侧的视图.它应该选择该视图,并在VIEwPager上调用setCurrentItem().这可以在当前项目右侧的视图中正常工作,但不能查看当前项目的左侧.当我点击该视图时,向我报告的位置是当前视图的位置.
这有一些代码,如果它有帮助.这是从PagerAdapter.instantiateItem()我在onClick()上触发:
@OverrIDe public Object instantiateItem(final VIEwGroup container,final int position) { cardlayout.setTag(profile); cardlayout.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { // mOnItemClickListener passed in to adapter on initialization mOnItemClickListener.onItemClick(null,vIEw,position,0); // other stuff happens here as well } }); }
任何感兴趣的人都可以使用整个PagerAdapter类:
static class GiveTenPagerAdapter extends PagerAdapter{ private final int ANIMATION_DURATION; private ListenerOnGiveTakeClick mListenerOnGiveTakeClick; private List<GiveTen> mGiveTens; private Context mContext; private LayoutInflater mInflater; private boolean mIsCrossFadeAnimationRunning; private int mSquarePhotoSIDeLength; GiveTenPagerAdapter(List<GiveTen> giveTens,Context context,ListenerOnGiveTakeClick ListenerOnGiveTakeClick) { mGiveTens = giveTens; mContext = context; mListenerOnGiveTakeClick = ListenerOnGiveTakeClick; mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); ANIMATION_DURATION = mContext.getResources().getInteger(androID.R.integer.config_mediumAnimTime); } List<GiveTen> getGiveTens() { return this.mGiveTens; } @OverrIDe public int getCount() { return mGiveTens.size(); } @OverrIDe public boolean isVIEwFromObject(VIEw vIEw,Object o) { return vIEw == o; } @OverrIDe public Object instantiateItem(final VIEwGroup container,final int position) { Logger.d("position=" + position); final GiveTen giveTen = mGiveTens.get(position); final UserProfile profile = giveTen.getUserProfile(); final relativeLayout cardlayout = (relativeLayout) mInflater.inflate(R.layout.give_ten_card,null); final relativeLayout profilePicLayout = (relativeLayout) cardlayout.findVIEwByID(R.ID.give_ten_profile_pic_layout); final ImageVIEw profileImageVIEw = (ImageVIEw) cardlayout.findVIEwByID(R.ID.give_ten_profile_pic); final VIEw vIEwFiller = cardlayout.findVIEwByID(R.ID.vIEw_filler); final int RADIUS = Math.round(mContext.getResources().getDimension(R.dimen.give_ten_card_corner_radius)); profileImageVIEw.getVIEwTreeObserver().addOnPreDrawListener(new VIEwTreeObserver.OnPreDrawListener() { @OverrIDe public boolean onPreDraw() { profileImageVIEw.getVIEwTreeObserver().removeOnPreDrawListener(this); //kv Using Math.max() to ensure that at least 1 dimension is positive //kv in case of some fucked up situation where the measured wIDth and //kv height returns 0 int wIDthProfileImageVIEw = Math.max(profileImageVIEw.getMeasureDWIDth(),1); int heightcardlayout = Math.max(profileImageVIEw.getMeasuredHeight(),1); //kv Somehow we can get into a situation where we in this PreDrawListener and there //kv are not give tens,which of course gives us a crash on mGiveTens.get(position) //kv If we find ourselves in that case,just show icon_photo_placement_lg if (mGiveTens.size() > 0) { Picasso picasso = Picasso.with(Bakery.getInstance()); picasso.setIndicatorsEnabled(BuildConfig.DEBUG); picasso.load(mGiveTens.get(position).getUserProfile().getProfilePic().getUrl()) .noFade() .resize(wIDthProfileImageVIEw,heightcardlayout) .centerCrop() .transform(new PicassotransformationRounded(RADIUS,0)) .into(profileImageVIEw); } else { profileImageVIEw.setimageResource(R.drawable.icon_photo_placement_lg); } return true; } }); TextVIEw profilePicGenderCriteriaTextVIEw = (TextVIEw) cardlayout.findVIEwByID(R.ID.give_ten_profile_pic_textvIEw_gender_criteria); TextVIEw profilePicCityTextVIEw = (TextVIEw) cardlayout.findVIEwByID(R.ID.give_ten_profile_pic_textvIEw_city); if (profile.getCriteriaGender().equals("m")) { profilePicGenderCriteriaTextVIEw.setText(R.string.give_ten_text_gender_criteria_male); } else { profilePicGenderCriteriaTextVIEw.setText(R.string.give_ten_text_gender_criteria_female); } String cityText = mContext.getResources().getString(R.string.give_ten_profile_pic_text_city_prefix) + " " + mGiveTens.get(position).getUserProfile().getCity() + "," + mGiveTens.get(position).getUserProfile().getState(); profilePicCityTextVIEw.setText(cityText); container.addVIEw(cardlayout); final relativeLayout giveTenDetailsLayout = getDetailsLayout(cardlayout,giveTen); vIEwFiller.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { Logger.d("vIEw=" + vIEw); boolean shouldCrossFade = !mListenerOnGiveTakeClick.onGiveTenClick(position - 1,true); if (mIsCrossFadeAnimationRunning == false && position > 0 && shouldCrossFade) { crossfadeVIEws(profilePicLayout,giveTenDetailsLayout); ManagerAnalytics.sendEvent(ManagerAnalytics.EVENT_VISITED_GIVE_TEN_CARD,ManagerAnalytics.ST1_PAGEVIEW); } } }); VIEw.OnClickListener onClickListener = new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { Logger.d("vIEw=" + vIEw); boolean shouldCrossFade = !mListenerOnGiveTakeClick.onGiveTenClick(position,false); if (mIsCrossFadeAnimationRunning == false && shouldCrossFade) { crossfadeVIEws(giveTenDetailsLayout,profilePicLayout); ManagerAnalytics.sendEvent(ManagerAnalytics.EVENT_VISITED_GIVE_TEN_CARD,ManagerAnalytics.ST1_PAGEVIEW); } } }; cardlayout.setonClickListener(onClickListener); ScrollVIEw giveTenCardDetailScrollContainer = (ScrollVIEw) cardlayout.findVIEwByID(R.ID.give_ten_card_detail_scroll_container); if (giveTenCardDetailScrollContainer != null) { linearLayout giveTenDetailsFIEldLayout = (linearLayout) giveTenCardDetailScrollContainer.findVIEwByID(R.ID.give_ten_detail_fIElds_layout); giveTenDetailsFIEldLayout.setTag(profile); giveTenDetailsFIEldLayout.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { Logger.d("vIEw=" + vIEw); boolean shouldCrossFade = !mListenerOnGiveTakeClick.onGiveTenClick(position,false); if (mIsCrossFadeAnimationRunning == false && shouldCrossFade) { crossfadeVIEws(profilePicLayout,giveTenDetailsLayout); ManagerAnalytics.sendEvent(ManagerAnalytics.EVENT_VISITED_GIVE_TEN_CARD,ManagerAnalytics.ST1_PAGEVIEW); } } }); } return cardlayout; } private voID crossfadeVIEws(final VIEw vIEw1,final VIEw vIEw2) { final VIEw visibleVIEw,invisibleVIEw; if (vIEw1.getVisibility() == VIEw.VISIBLE) { visibleVIEw = vIEw1; invisibleVIEw = vIEw2; } else { visibleVIEw = vIEw2; invisibleVIEw = vIEw1; } mIsCrossFadeAnimationRunning = true; invisibleVIEw.setAlpha(0.0f); invisibleVIEw.setVisibility(VIEw.VISIBLE); invisibleVIEw.animate() .Alpha(1.0f) .setDuration(ANIMATION_DURATION) .setListener(new AnimatorListenerAdapter() { @OverrIDe public voID onAnimationEnd(Animator animation) { mIsCrossFadeAnimationRunning = false; } }); visibleVIEw.animate() .Alpha(0.0f) .setDuration(ANIMATION_DURATION) .setListener(new AnimatorListenerAdapter() { @OverrIDe public voID onAnimationEnd(Animator animation) { visibleVIEw.setVisibility(VIEw.GONE); mIsCrossFadeAnimationRunning = false; } }); } public voID crossFadeVIEws(VIEw vIEw) { final relativeLayout giveTenDetailLayout = (relativeLayout) vIEw.findVIEwByID(R.ID.give_ten_detail_layout); final relativeLayout profilePicLayout = (relativeLayout) vIEw.findVIEwByID(R.ID.give_ten_profile_pic_layout); crossfadeVIEws(profilePicLayout,giveTenDetailLayout); } private relativeLayout getDetailsLayout(VIEw parent,GiveTen giveTen) { relativeLayout giveTenDetailsLayout = (relativeLayout) parent.findVIEwByID(R.ID.give_ten_detail_layout); UserProfile profile = giveTen.getUserProfile(); TextVIEw genderCriteriaTextVIEw = (TextVIEw) giveTenDetailsLayout.findVIEwByID(R.ID.give_ten_detail_gender_criteria_textvIEw); if (profile.getCriteriaGender().equals("m")) { genderCriteriaTextVIEw.setText(R.string.give_ten_text_gender_criteria_male); } else { genderCriteriaTextVIEw.setText(R.string.give_ten_text_gender_criteria_female); } TextVIEw cityTextVIEw = (TextVIEw) giveTenDetailsLayout.findVIEwByID(R.ID.give_ten_detail_city_textvIEw); cityTextVIEw.setText(profile.getCity() + "," + giveTen.getUserProfile().getState()); TextVIEw ageTextVIEw = (TextVIEw) giveTenDetailsLayout.findVIEwByID(R.ID.give_ten_detail_age_textvIEw); ageTextVIEw.setText(mContext.getResources().getString(R.string.give_ten_text_age) + " " + DateUtils.getAgeFromBirthday(profile.getBirthday())); TextVIEw heightTextVIEw = (TextVIEw) giveTenDetailsLayout.findVIEwByID(R.ID.give_ten_detail_height_textvIEw); heightTextVIEw.setText(mContext.getResources().getString(R.string.give_ten_text_height) + " " + profile.getHeightFeet() + "'" + profile.getHeightInches()); TextVIEw religionTextVIEw = (TextVIEw) giveTenDetailsLayout.findVIEwByID(R.ID.give_ten_detail_religion_textvIEw); religionTextVIEw.setText((mContext.getResources().getStringArray(R.array.religion)[Religion.getIndex(profile.getReligionAPIparam())])); TextVIEw educationTextVIEw0 = (TextVIEw) giveTenDetailsLayout.findVIEwByID(R.ID.give_ten_detail_education_1_textvIEw); TextVIEw educationTextVIEw1 = (TextVIEw) giveTenDetailsLayout.findVIEwByID(R.ID.give_ten_detail_education_2_textvIEw); List<String> education = profile.getEducation(); List<Degree> degree = profile.getListdegrees(); if (education.size() > 0) { if (degree.size() > 0) { educationTextVIEw0.setText(education.get(0) + "/" + degree.get(0).toString().tolowerCase()); } else { educationTextVIEw0.setText(education.get(0)); } if (education.size() > 1) { if (degree.size() > 1) { educationTextVIEw1.setText(education.get(1) + "/" + degree.get(1).toString().tolowerCase()); } else { educationTextVIEw1.setText(education.get(1)); } educationTextVIEw1.setVisibility(VIEw.VISIBLE); } } TextVIEw occupation = (TextVIEw) giveTenDetailsLayout.findVIEwByID(R.ID.give_ten_detail_occupation_textvIEw); occupation.setText(profile.getoccupation()); final List<ImageVIEw> giveTenDetailPics = new ArrayList<ImageVIEw>(); giveTenDetailPics.add((ImageVIEw) giveTenDetailsLayout.findVIEwByID(R.ID.give_ten_detail_pic_1)); giveTenDetailPics.add((ImageVIEw) giveTenDetailsLayout.findVIEwByID(R.ID.give_ten_detail_pic_2)); giveTenDetailPics.add((ImageVIEw) giveTenDetailsLayout.findVIEwByID(R.ID.give_ten_detail_pic_3)); giveTenDetailPics.add((ImageVIEw) giveTenDetailsLayout.findVIEwByID(R.ID.give_ten_detail_pic_4)); //kv Calculate length of sIDe for photos float wIDthPhotolayout = VIEwUtils.getScreenWIDth() - 2 * mContext.getResources().getDimension(R.dimen.give_ten_layout_margin_sIDe) - 2 * mContext.getResources().getDimension(R.dimen.give_ten_detail_margin_sIDe) - 6 * mContext.getResources().getDimension(R.dimen.give_ten_photo_margin_sIDe); mSquarePhotoSIDeLength = (int) (wIDthPhotolayout / 4); List<Photo> detailPhotos = profile.getPhotos(); for (int i = 0; i < detailPhotos.size(); i++) { final ImageVIEw imageVIEw = giveTenDetailPics.get(i); final Photo photo = detailPhotos.get(i); final String url = photo.getUrlthumbnail(); Logger.d("about to display " + url + ",length=" + mSquarePhotoSIDeLength); Picasso.with(mContext) .load(url) .noFade() .resize(mSquarePhotoSIDeLength,mSquarePhotoSIDeLength) .placeholder(R.drawable.icon_photo_placement_s) .into(imageVIEw,new Callback() { @OverrIDe public voID onSuccess() { //Logger.e("success on " + url); } @OverrIDe public voID onError() { Logger.e("error"); } }); } return giveTenDetailsLayout; } @OverrIDe public voID destroyItem(VIEwGroup container,int position,Object object) { container.removeVIEw((VIEw) object); }}解决方法 您可以拦截触摸事件并从该事件中获取坐标.
if(event.getRawX() < margin && canGoleft){goleft();}else if(event.getRawX() > screenWIDth - margin && canGoRight) {goRight();}else { // We are not interested in this event,pass it down the food chain}总结
以上是内存溢出为你收集整理的如果点击上一个项目,Android PagerAdapter不会报告正确的位置全部内容,希望文章能够帮你解决如果点击上一个项目,Android PagerAdapter不会报告正确的位置所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)