ImageLoader,WebView,无线轮播,缓存到所要的地址

来源:互联网 发布:js图片滚动代码 编辑:程序博客网 时间:2024/06/08 17:22
*主Activity  WebActivity清单文件上要有+获取网络的权限
*ImageLoader所需导入的
*compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
public class MainActivity extends AppCompatActivity {    private ViewPager pager;    List<String> lists = new ArrayList<>();    private List<ImageView> images;    private LinearLayout linearLayout;    private Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if (msg.what == 0){                int currentItem = pager.getCurrentItem();                pager.setCurrentItem(currentItem+1);                handler.sendEmptyMessageDelayed(0 , 2000);            }        }    };    private TextView textView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        pager = (ViewPager) findViewById(R.id.view_pager);        textView = (TextView) findViewById(R.id.text_view);        linearLayout = (LinearLayout) findViewById(R.id.linear_layout);        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {            @Override            protected String doInBackground(Void... voids) {                String path = "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=6&page=1";                try {                    URL url = new URL(path);                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();                    connection.setRequestMethod("GET");                    connection.setReadTimeout(5000);                    connection.setConnectTimeout(5000);                    int responseCode = connection.getResponseCode();                    if (responseCode == 200){                        InputStream inputStream = connection.getInputStream();                        String json = StreamToString(inputStream, "utf-8");                        return json;                    }                } catch (Exception e) {                    e.printStackTrace();                }                return null;            }            @Override            protected void onPostExecute(String s) {                super.onPostExecute(s);                Gson gson = new Gson();                UserBean userBean = gson.fromJson(s, UserBean.class);                final List<UserBean.NewslistBean> list = userBean.getNewslist();                for (int i = 0 ; i < list.size() ; i ++){                    lists.add(list.get(i).getPicUrl());                }                //初始化小圆点                MyAdapter adapter = new MyAdapter(MainActivity.this, list , handler);                pager.setAdapter(adapter);                //初始化小圆点                initDoc();                //设置ViewPager初始展示的位置                pager.setCurrentItem(lists.size()*10000);                //发送延时消息                handler.sendEmptyMessageDelayed(0 , 2000);                //viewPager页面改变的监听事件                pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {                    @Override                    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {                    }                    @Override                    public void onPageSelected(int position) {                        textView.setText(list.get(position%list.size()).getTitle());                        //如果选中了这一页,,,当前小圆点红色,,,否则绿色                        for (int i = 0;i<images.size();i++){                            if (i== position%images.size()){                                images.get(i).setImageResource(R.drawable.doc_select);                            }else {                                images.get(i).setImageResource(R.drawable.doc_select_no);                            }                        }                    }                    @Override                    public void onPageScrollStateChanged(int state) {                    }                });            }        };        asyncTask.execute();    }    private String StreamToString(InputStream inputStream, String s) {        try {            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, s);            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);            StringBuilder builder = new StringBuilder();            String string = "";            while ((string=bufferedReader.readLine()) != null){                builder.append(string);            }            bufferedReader.close();            Log.i("builder" , "builder---->" + builder.toString());            return builder.toString();        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    //初始化小圆点    private void initDoc() {        //首先需要一个集合记录这些小圆点的图片,,,,当页面切换的时候,可以从集合中取出imageView进行显示图片的设置        images = new ArrayList<>();        linearLayout.removeAllViews();//清空/移除所有的view        for (int i = 0;i<lists.size();i++){            ImageView imageView = new ImageView(MainActivity.this);            if (i==0){//显示第一页,,,红的                imageView.setImageResource(R.drawable.doc_select);            }else {//绿的                imageView.setImageResource(R.drawable.doc_select_no);            }            //添加到集合            images.add(imageView);            //加入到线性布局中显示            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);            params.setMargins(5,0,5,0);            linearLayout.addView(imageView,params);        }    }}
*adapter
public class MyAdapter extends PagerAdapter {    Context context;    List<UserBean.NewslistBean> list;    Handler handler;    public MyAdapter(Context context, List<UserBean.NewslistBean> list, Handler handler) {        this.context = context;        this.list = list;        this.handler = handler;        ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context));    }    @Override    public int getCount() {        return Integer.MAX_VALUE;    }    @Override    public boolean isViewFromObject(View view, Object object) {        return view == object;    }    @Override    public Object instantiateItem(ViewGroup container, final int position) {        ImageView imageView = new ImageView(context);        imageView.setScaleType(ImageView.ScaleType.FIT_XY);        ImageLoader.getInstance().displayImage(list.get(position%list.size()).getPicUrl() , imageView);        //imageView触摸的监听事件        imageView.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View view, MotionEvent motionEvent) {                boolean isTiaozhuan = true;                switch (motionEvent.getAction()){                    case MotionEvent.ACTION_DOWN://按下                        Log.i("-----" , "ACTION_DOWN");                        handler.removeCallbacksAndMessages(null);                        break;                    case MotionEvent.ACTION_MOVE://移动                        Log.i("-----" , "ACTION_MOVE");                        isTiaozhuan = false;                        handler.removeCallbacksAndMessages(null);                        break;                    case MotionEvent.ACTION_CANCEL://取消                        Log.i("-----" , "ACTION_CANCEL");                        isTiaozhuan = false;                        handler.sendEmptyMessageDelayed(0 , 2000);                        break;                    case MotionEvent.ACTION_UP://抬起                        Log.i("-----" , "ACTION_UP");                        if (isTiaozhuan){                            Toast.makeText(context , "跳转页面" , Toast.LENGTH_SHORT).show();                            Intent intent = new Intent(context , WebActivity.class);                            intent.putExtra("url" , list.get(position%list.size()).getUrl());                            context.startActivity(intent);                        }                        handler.sendEmptyMessageDelayed(1 , 2000);                        break;                    default:                        break;                }                //自己处理触摸事件....如果当前位置返回了true,,,点击事件将不会执行,,,表示动作自己处理,不会传递                return true;            }        });        //添加到容器        container.addView(imageView);        return imageView;    }    @Override    public void destroyItem(ViewGroup container, int position, Object object) {        container.removeView((View) object);    }}
*两个XML布局
*doc_select
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android">    <solid android:color="#ff0000"/>    <corners android:radius="5dp"/>    <size android:height="10dp" android:width="10dp"/></shape>
*doc_select_no
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android">    <solid android:color="#00ff00"/>    <corners android:radius="5dp"/>    <size android:height="10dp" android:width="10dp"/></shape>
*BASEApplication
public class Basepplicent extends Application {    @Override    public void onCreate() {        super.onCreate();        ImageLoaderUtil.initConfig(this);    }}
*ImageLoader
public class ImageLoaderUtil {    public static void initConfig(Context context) {
//默认的缓存路径        File cacheDir = StorageUtils.getCacheDirectory(context);  //缓存文件夹路径
 //自己定义的缓存地址
 File cacheDir = new File(Environment.getExternalStorageDirectory(),"/image");  //缓存文件夹路径      if (!cacheDir.exists()){          cacheDir.mkdirs();      }        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)            .threadPoolSize(3) // default  线程池内加载的数量            .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级            .tasksProcessingOrder(QueueProcessingType.FIFO) // default            .denyCacheImageMultipleSizesInMemory()            .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现            .memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值            .memoryCacheSizePercentage(13) // default            .diskCache(new UnlimitedDiskCache(cacheDir)) // default 可以自定义缓存路径            .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd(本地)缓存的最大值            .diskCacheFileCount(100)  // 可以缓存的文件数量            // default为使用HASHCODEUIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密            .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())            .imageDownloader(new BaseImageDownloader(context)) // default            .imageDecoder(new BaseImageDecoder(true)) // default            .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default            .writeDebugLogs() // 打印debug log            .build(); //开始构建        ImageLoader.getInstance().init(config);    }}
*WebActivity
public class WebActivity extends AppCompatActivity {    private WebView webView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_web);        webView = (WebView) findViewById(R.id.web_view);        Intent intent = getIntent();        String url = intent.getStringExtra("url");        //加载        webView.loadUrl(url);        //设置        webView.setWebViewClient(new WebViewClient());        WebSettings settings = webView.getSettings();        settings.setJavaScriptEnabled(true);        settings.setJavaScriptCanOpenWindowsAutomatically(true);    }}