实例介绍
【实例简介】
【实例截图】
【实例截图】
【核心代码】
package com.pay.hzdaily.ui.adapter; import java.io.File; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.WeakHashMap; import org.json.JSONObject; import com.androidquery.AQuery; import com.androidquery.callback.AjaxCallback; import com.androidquery.callback.AjaxStatus; import com.androidquery.callback.BitmapAjaxCallback; import com.pay.hzdaily.R; import com.pay.hzdaily.context.Commen; import com.pay.hzdaily.context.Constants; import com.pay.hzdaily.model.db.provider.CategoryProvider; import com.pay.hzdaily.model.db.provider.NewsProvider; import com.pay.hzdaily.model.entity.base.Category; import com.pay.hzdaily.model.entity.base.Image; import com.pay.hzdaily.model.entity.base.News; import com.pay.hzdaily.model.http.DownloadProgressListener; import com.pay.hzdaily.model.http.FileDownloader; import com.pay.hzdaily.model.http.HttpApi; import com.pay.hzdaily.ui.NewsDetailsContentFragment; import com.pay.hzdaily.utils.BitmapDecoder; import com.pay.hzdaily.utils.Logs; import com.pay.hzdaily.utils.SDCardFileUtils; import com.pay.hzdaily.utils.Utility; import android.R.integer; import android.app.Dialog; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.text.Html; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.WindowManager.LayoutParams; import android.view.ViewGroup; import android.webkit.WebSettings; import android.webkit.WebSettings.LayoutAlgorithm; import android.webkit.WebSettings.TextSize; import android.webkit.WebView; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.Gallery; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; public class ViewPagerAdapter extends PagerAdapter implements OnItemSelectedListener,OnItemClickListener{ /** 上下文 **/ private Context context; /** ID列表 **/ private ArrayList<String> idlList; /** 布局加载器 **/ private LayoutInflater mInflater; /** views 两端为一个空白view增加反弹效果 **/ final ArrayList<View> views = new ArrayList<View>(); /** 分享的图片地址 **/ private String[] shareImg; /** 分享的新闻文字内容 **/ private String[] shareStr; /** 字体大小设置 **/ private float textSize; /** aq **/ private AQuery aq; /** 类别 **/ private String categoryId; private CategoryProvider categoryProvider; /** gallery 适配器 **/ private NewDetailsGalllery galleryAdapter; /** point **/ private LinearLayout mLayout; /** 图片的导航点点 **/ private Drawable point; /** 每条新闻的图片数 **/ private int[] eachItemPicNum; /** 每条新闻是否加载 **/ private int[] positionValue; /** 字体大小设置 **/ private WebView textSizeView; /** news id **/ private String countryNameStr; /** 列表名称 **/ private String posiName; /** 区县新闻的区域名称列表 **/ private ArrayList<String> listName; /** viewpager 索引 **/ public int itemPosttion; /** 新闻的加载状态 **/ public static final int NO_LOADED = 0; public static final int LOADING = 1; public static final int LOADED = 2; /** 存储图片信息 **/ private HashMap<String, List<Image>> map; private WebSettings settings; private int ToastState=0; /** 存放图片文件的文件夹地址 **/ private String dowloadDir = Environment.getExternalStorageDirectory() "/hzdaily/newsdetailpic/"; private WeakHashMap<Integer, Bitmap> mCacheBitmapMap = new WeakHashMap<Integer, Bitmap>(); private NewsProvider newsProvider = null; private boolean isFromCloud = false; public ViewPagerAdapter(Context context,float size,AQuery aq, String categoryId){ mInflater = LayoutInflater.from(context); this.context = context; textSize = size; this.aq = new AQuery(this.context); this.categoryId = categoryId; dowloadDir = dowloadDir categoryId "/"; if (Logs.IS_DEBUG) { Logs.v("guo", "......cataid..../." categoryId); } judeEnvironment(); categoryProvider = new CategoryProvider(context); map = new HashMap<String, List<Image>>(); newsProvider = new NewsProvider(context); } /** * 文件路径判定 */ private void judeEnvironment() { // TODO Auto-generated method stub //判定SD卡是否插入 if (SDCardFileUtils.avaiableSDCard()) { File file = new File(dowloadDir); //如果目录不存在 则创建下载目录 if (!file.exists()) { file.mkdirs(); } } } @Override public int getCount() { // TODO Auto-generated method stub return views.size(); } @Override public void destroyItem(View container, int position, Object object) { // TODO Auto-generated method stub ((ViewPager)container).removeView(views.get(position)); } /** * 跳转到每个页面都要执行的方法 */ @Override public void setPrimaryItem(View container, int position, Object object) { // TODO Auto-generated method stub setPosition(position); //保证每条新闻都只请求一次联网 if (positionValue[position] == NO_LOADED) { positionValue[position] = LOADING; Logs.v("guo","idlList.get(position)==" idlList.get(position-1)); List<News> list = newsProvider.getById(categoryId, idlList.get(position-1)); if(list != null && list.size()>0) { News news = list.get(0); Logs.v("guo", "获取数据库" news.toString()); setNewsInfo(news); }else { if (Logs.IS_DEBUG) { Logs.v("guo", "联网请求............." itemPosttion); } LinearLayout layout = (LinearLayout) views.get(itemPosttion).findViewById(R.id.progressBar1); layout.setVisibility(View.VISIBLE); getNewsData(categoryId, position-1,false); } } //控制弹出toast次数,保证每次页面都只弹出一次 if (position != 0 && position != positionValue.length-1) { ToastState =0; } if (position == 1) { NewsDetailsContentFragment.setLastBtn(true); }else { NewsDetailsContentFragment.setLastBtn(false); } if (position == idlList.size()) { NewsDetailsContentFragment.setNextBtn(true); }else { NewsDetailsContentFragment.setNextBtn(false); } } @Override public Object instantiateItem(ViewGroup container, int position) { // TODO Auto-generated method stub ((ViewPager)container).addView(views.get(position)); return views.get(position); } @Override public void startUpdate(ViewGroup container) { // TODO Auto-generated method stub super.startUpdate(container); } @Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return arg0 == arg1; } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { // TODO Auto-generated method stub showDialogGallery(position); } @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long arg3) { // TODO Auto-generated method stub // arg1.getParent().requestDisallowInterceptTouchEvent(true); NewDetailsGalllery.releaseBitmap(position, position); addNavigation(position); } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } /** * 设置新闻的条数,在NewsDetailsContentFragment设置adpater后调用 * @param list * @param listName * @param posiName * @param isFromCloud */ public void setNewsId(ArrayList<String> list, String posiName, ArrayList<String> listName, boolean isFromCloud) { idlList = list; this.posiName = posiName; this.listName = listName; this.isFromCloud = isFromCloud; positionValue = new int[idlList.size() 2]; eachItemPicNum = new int[idlList.size() 2]; for (int i = 0; i < positionValue.length; i ) { positionValue[i] = NO_LOADED; eachItemPicNum[i] = 0; if (i == 0) { positionValue[i] = LOADED; eachItemPicNum[i] = 0; } if (i == positionValue.length -1) { positionValue[i] = LOADED; eachItemPicNum[i] = 0; } } for (int i = 0; i < idlList.size() 2; i ) { if (i == 0) { View view = new View(context); views.add(view); }else { if (i == idlList.size() 1) { View view = new View(context); views.add(view); }else { views.add(setView()); } } } shareStr = new String[views.size()]; shareImg = new String[views.size()]; notifyDataSetChanged(); } /** * 设置每个页面的索引 * @param init */ public void setPosition(int init) { NewsDetailsContentFragment.itemPosition = init; itemPosttion = init; } /** * 获取每个页面的索引 * @return */ public int getPosition() { return itemPosttion; } /** * 判断是否为区县新闻 * @return boolean */ private boolean isCountryNews() { if (isFromCloud) { return false; }else { //区县id的判空处理 if (posiName.equals("区县新闻") ||posiName.equals("服务资讯")) { return true; }else { return false; } } } /** * 判断当前页面的新闻是否加载完毕,加载完毕后方可分享 * @return */ public boolean getPositionIsLoaded() { if (positionValue[itemPosttion] == LOADED) { return true; }else { return false; } } /** * 获取新闻数据 * @param b 是否是刷新数据 */ private void getNewsData(final String categoryid,final int index, final boolean b) { // TODO Auto-generated method stub aq.ajax(HttpApi.getNewsDetail( categoryid,idlList.get(index)), JSONObject.class, new AjaxCallback<JSONObject>(){ @Override public void callback(String url, JSONObject json, AjaxStatus status) { // TODO Auto-generated method stub LinearLayout layout = (LinearLayout) views.get(itemPosttion).findViewById(R.id.progressBar1); layout.setVisibility(View.GONE); if (null != json && null != json.optJSONObject("news")) { if (Logs.IS_DEBUG) { Logs.v("guo", "......................" "...数据获取成功.." idlList.get(index) json.toString()); Logs.v("guo", "系统版本=" String.valueOf(Commen.getSystemVersion())); Logs.v("guo", "id=" idlList.get(index)); } Category vCategory = new Category(); vCategory.setId(categoryid); News news = new News().createFromApi( json.optJSONObject("news")); news.setCategory(vCategory); newsProvider.store(news); newsProvider.close(); setNewsInfo(news); ((TextView)views.get(itemPosttion).findViewById(R.id.text_warning)). setVisibility(View.GONE); }else { if (b) { }else { //如果没有获取到数据就提示加载失败 ((TextView)views.get(itemPosttion).findViewById(R.id.text_warning)). setVisibility(View.VISIBLE); WebView webView =((WebView)views.get(itemPosttion).findViewById(R.id. text_news_datails_content)); webView.setBackgroundColor(Color.parseColor("#ebebeb")); } } } }); } /** * 设置文章的内容 * @param news */ private void setNewsInfo(News news) { // TODO Auto-generated method stub // set title if (news.getTitle() != null) { ((TextView)views.get(itemPosttion).findViewById(R.id. text_news_detail_title)).setText((Html.fromHtml(news.getTitle().trim()))); } //set author // if (!isEmpty(news.getAuthor()) || !news.getAuthor().equals("null")) { // ((TextView)views.get(itemPosttion).findViewById(R.id. // text_news_detail_author)).setText("本报讯"); // }else { // ((TextView)views.get(itemPosttion).findViewById(R.id. // text_news_detail_author)).setText("本报讯"); // } // set data if (news.getPublishDate() != null) { String publishDate = Utility.setDataFormat(news.getPublishDate()); ((TextView)views.get(itemPosttion).findViewById(R.id. text_news_detail_data)).setText(publishDate); } //区县新闻的城市名字 Button countryName = ((Button)views.get(itemPosttion).findViewById( R.id.text_news_detail_country)); if (isCountryNews()) { countryName.setVisibility(View.VISIBLE); if (listName != null) { String str = listName.get(itemPosttion-1); countryName.setText(str); } }else { countryName.setVisibility(View.GONE); } //set content if (news.getContent() != null) { WebView webView =((WebView)views.get(itemPosttion).findViewById(R.id. text_news_datails_content)); webView.getSettings().setDefaultTextEncodingName("UTF-8"); settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); webView.clearCache(true); settings.setSupportZoom(true); settings.setTextSize(getLocalTextSize(textSize)); webView.setBackgroundColor(Color.parseColor("#ebebeb")); webView.loadDataWithBaseURL(null, Utility.ToDBC(news.getContent()), "text/html", "UTF-8", null); } //set gallery if (news.getImages() != null) { Gallery gallery; gallery = (Gallery)views.get(itemPosttion).findViewById( R.id.gallery); galleryAdapter = new NewDetailsGalllery(context,aq,news.getImages(),categoryId, mCacheBitmapMap,false); gallery.setAdapter(galleryAdapter); map.put(String.valueOf(itemPosttion), news.getImages()); eachItemPicNum[itemPosttion] = news.getImages().size(); shareImg[itemPosttion] = Constants.host news.getImages().get(0).getImgUrl(); gallery.setOnItemSelectedListener(ViewPagerAdapter.this); gallery.setOnItemClickListener(ViewPagerAdapter.this); gallery.setVisibility(View.VISIBLE); }else { shareImg[itemPosttion] = "nopic"; } notifyDataSetChanged(); //set share data if (news.getContent()!= null) { if ( news.getContent().length()<120) { shareStr[itemPosttion] = news.getTitle() news.getContent(). substring(0, news.getContent().length()) "....."; }else { shareStr[itemPosttion] = news.getTitle() news.getContent().substring(0, 120) "....."; } } positionValue[itemPosttion] = LOADED; } /** * 获得每个新闻的view,后面再加载数据进去 * @param news * @return */ private View setView() { // TODO Auto-generated method stub final ViewPagerHolder holder = new ViewPagerHolder(); View view = mInflater.inflate(R.layout. news_datails_viewpager_item, null); holder.mTitle = (TextView)view.findViewById( R.id.text_news_detail_title); holder.mAuthor = (TextView)view.findViewById( R.id.text_news_detail_author); holder.mData = (TextView)view.findViewById(R.id. text_news_detail_data); holder.mWarning = (TextView)view.findViewById(R.id. text_warning); holder.mGallery = (Gallery)view.findViewById(R.id.gallery); // holder.mGallery.getParent().requestDisallowInterceptTouchEvent(true); holder.mGallery.setVisibility(View.GONE); // //viewpager 和 galler 焦点问题解决 //添加导航点点 holder.mpintLayout = (LinearLayout)view.findViewById(R.id.layout_point); holder.mpintLayout.setVisibility(View.GONE); point = context.getResources().getDrawable(R.drawable.icon_unselect); holder.mContent = (WebView)view.findViewById(R.id. text_news_datails_content); holder.mContent.setBackgroundColor(Color.parseColor("#ebebeb")); return view; } /** * show a Gallery as Dialog Way */ private void showDialogGallery(final int position) { // TODO Auto-generated method stub // Layout Loader final LayoutInflater inflater = (LayoutInflater)context. getSystemService(Context.LAYOUT_INFLATER_SERVICE); //DialogView final View mView = inflater.inflate( R.layout.news_details_gallery_asdialog, null); Dialog mDialog = new Dialog(context, R.style.gallery_dialog); mDialog.getWindow().getAttributes().flags = android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND; mDialog.getWindow().getAttributes().dimAmount= 0.7f; mDialog.getWindow().getAttributes().alpha = 1.0f; final LayoutParams dialogLayoutParams = new LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); mDialog.setContentView(mView, dialogLayoutParams); mDialog.setCanceledOnTouchOutside(true); Gallery gallery = (Gallery)mView.findViewById( R.id.gallery_asdialog); final NewDetailsGalllery mAdapter = new NewDetailsGalllery(context, aq, map.get(String.valueOf(itemPosttion)),categoryId,mCacheBitmapMap,true); gallery.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub NewDetailsGalllery.releaseBitmap(arg2,position); } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } }); gallery.setAdapter(mAdapter); gallery.setSelection(position); mDialog.show(); } /** * 每页新闻所显示的内容 * @author freddy.guo * */ public class ViewPagerHolder{ private TextView mWarning; private TextView mTitle; private TextView mAuthor; private TextView mData; private WebView mContent; private Gallery mGallery; private LinearLayout mpintLayout; } /** * 设置新闻的字体大小 * @param size */ public void setTextSize(float size) { if (Logs.IS_DEBUG) { Logs.v("freddy", "字体大小设置"); } if (null == views) { return; } for (int i = 1; i < views.size()-1; i ) { textSizeView = (WebView)views.get(i).findViewById(R.id. text_news_datails_content); textSize = size; settings = textSizeView.getSettings(); settings.setTextSize(getLocalTextSize(size)); } notifyDataSetChanged(); } /** * 获取字体大小的分类 * @return */ private TextSize getLocalTextSize(float textSize) { if ((int)textSize <=12) { return WebSettings.TextSize.SMALLEST; } if ((int)textSize == 14) { return WebSettings.TextSize.SMALLER; } if ((int)textSize ==16) { return WebSettings.TextSize.NORMAL; } if ((int)textSize ==18) { return WebSettings.TextSize.LARGER; } if ((int)textSize==20) { return WebSettings.TextSize.LARGEST; } return WebSettings.TextSize.NORMAL; } /** * 判定字符串是否为空 * @param value * @return */ private boolean isEmpty(String value) { int strLen; if (value == null || (strLen = value.length()) == 0) { return true; } for (int i = 0; i < strLen; i ) { if ((Character.isWhitespace(value.charAt(i)) == false)) { return false; } } return true; } /** * add gallery navigation */ private void addNavigation(int position) { mLayout = (LinearLayout)views.get(itemPosttion).findViewById(R.id.layout_point); mLayout.setVisibility(View.VISIBLE); mLayout.removeAllViews(); for (int i = 0; i <eachItemPicNum[itemPosttion]; i ) { ImageView im = new ImageView(context); if (i == position) { im.setImageDrawable(context.getResources(). getDrawable(R.drawable.icon_selected)); } else { im.setImageDrawable(point); } im.setPadding(5, 2, 0, 0); mLayout.removeView(im); mLayout.addView(im); } if (eachItemPicNum[itemPosttion] == 1) { mLayout.setVisibility(View.GONE); } } /** * 获取分享的字段数据 * @return */ public String getShareDate() { return Html.fromHtml(shareStr[itemPosttion]).toString(); } /** * 获取分享的图片URL * @return */ public String getSharePicUrl() { return shareImg[itemPosttion]; } public void refreshDate() { // TODO Auto-generated method stub //显示提示 LinearLayout layout = (LinearLayout) views.get(itemPosttion).findViewById(R.id.progressBar1); ((TextView)views.get(itemPosttion).findViewById(R.id.text_warning)). setVisibility(View.GONE); layout.setVisibility(View.VISIBLE); getNewsData(categoryId, itemPosttion-1,true); } }
好例子网口号:伸出你的我的手 — 分享!
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)