初学Android之viewPager+imageLoader+图片圆角(类似qq头像)+xListView+DrawLayout

有adapter、application、bean、view这几个包 接下来就按照顺序去写一下


首先是adapter

public class MyPagerAdapter extends PagerAdapter{
    Context context;
    List<String> alist;
    public MyPagerAdapter(Context context, List<String> alist) {
        this.context=context;
        this.alist=alist;
    }


    @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, int position) {
        ImageView imageView = new ImageView(context);
        ImageLoader.getInstance().displayImage(alist.get(position%=alist.size()),imageView);
        container.addView(imageView);
        return imageView;


    }


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



-------------------------------------------------------


public class MyxlvAdapter extends BaseAdapter{
    private int LEFT_IMAGE=0;
    private int RIGHT_IMAGE=1;
    Context context;
    List<DataDataBean.DataBean> list;
    public MyxlvAdapter(Context context, List<DataDataBean.DataBean> list) {
        this.context=context;
        this.list=list;
    }


    @Override
    public int getCount() {
        return list.size();
    }


    @Override
    public Object getItem(int i) {
        return list.get(i);
    }


    @Override
    public long getItemId(int i) {
        return i;
    }


    @Override
    public int getViewTypeCount() {
        return 2;
    }


    @Override
    public int getItemViewType(int position) {
        if(position%2==0)
        {
            return LEFT_IMAGE;
        }
        else{
            return RIGHT_IMAGE;
        }
    }


    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        if(getItemViewType(i)==LEFT_IMAGE)
        {
            ViewHolder_01 holder=null;
            if(view==null)
            {
                view=View.inflate(context, R.layout.left_layout,null);
                holder=new ViewHolder_01();
                holder.tv=(TextView) view.findViewById(R.id.left_tv);
                holder.iv= (ImageView) view.findViewById(R.id.left_iv);
                view.setTag(holder);
            }
            else{
                holder= (ViewHolder_01) view.getTag();
            }
            holder.tv.setText(list.get(i).getTitle());
            ImageLoader.getInstance().displayImage(list.get(i).getImg(),holder.iv, ImageLoaderUtil.getCircleOption());


        }
        else{
            ViewHolder holder=null;
            if(view==null)
            {
                view=View.inflate(context, R.layout.right_layout,null);
                holder=new ViewHolder();
                holder.tv=(TextView) view.findViewById(R.id.right_tv);
                view.setTag(holder);
            }
            else{
                holder= (ViewHolder) view.getTag();
            }
            holder.tv.setText(list.get(i).getTitle());
            //ImageLoader.getInstance().displayImage(list.get(i).getImg(),holder.iv, ImageLoaderUtil.getDefaultOption());
        }
        return view;
    }




    private class ViewHolder_01{
        TextView tv;
        ImageView iv;
    }


    private class ViewHolder{
        TextView tv;
        ImageView iv;
    }


}


--------------------------------------------------


import android.content.Context;
import android.graphics.Bitmap;
import android.os.Environment;
import com.bawei.administrator.lianxi_1013ev.R;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.display.CircleBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
import com.nostra13.universalimageloader.utils.StorageUtils;


import java.io.File;


/**
 * @author Dash
 * @date 2017/10/10
 * @description:
 */
public class ImageLoaderUtil {


    /**
     * 对imageLoader进行配置的方法
     * @param context 上下文
     */
    public static void init(Context context) {


        File cacheDir = StorageUtils.getCacheDirectory(context);  //指定默认的硬盘(sd卡)的缓存文件夹路径


        /**
         * 可以自己创建一个sd下面的文件夹作为硬盘缓存的路径
         */
        File file = new File(Environment.getExternalStorageDirectory(),"image");
        if (! file.exists()){
            file.mkdirs();
        }


        //1.创建一个ImageLoaderConfiguration,,,图片加载器的配置对象
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)


                .threadPoolSize(3) // default  线程池内加载的数量
                .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
                .tasksProcessingOrder(QueueProcessingType.FIFO) // default
                .denyCacheImageMultipleSizesInMemory()


                //1 TB = 1024GB 1G=1024MB 1M = 1024KB 1KB = 1024BYTE
                //LruMemoryCache,,lru最近最少使用算法...内部维护的是LinkedHashMap,,当一张图片最近很少使用的时候会从mao集合里面移除
                .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //指定内存缓存的大小,,2M,,可以通过自己的内存缓存实现
                .memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值
                .memoryCacheSizePercentage(13) // default


                //指定硬盘/磁盘缓存的路径
                .diskCache(new UnlimitedDiskCache(cacheDir)) // default 可以自定义缓存路径
                .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
                .diskCacheFileCount(100)  // 可以缓存的文件数量




                .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
                .writeDebugLogs() // 打印debug log
                .build(); //开始构建


        //2.对上面配置对象的初始化
        ImageLoader.getInstance().init(config);


    }


    /**
     * 默认的展示图片的选项
     *
     * @return
     */
    public static DisplayImageOptions getDefaultOption() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片


                .resetViewBeforeLoading(true)  // default 设置图片在加载前是否重置、复位


                .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
                .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中


                .considerExifParams(true) // default




                .imageScaleType(ImageScaleType.EXACTLY_STRETCHED) // default 设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型


                .displayer(new SimpleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)


                .build();


        return options;
    }


    /**
     * 展示圆角的选项
     * @return
     */
    public static DisplayImageOptions getRoundOption() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片


                .resetViewBeforeLoading(true)  // default 设置图片在加载前是否重置、复位


                .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
                .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中


                .considerExifParams(true) // default




                .imageScaleType(ImageScaleType.EXACTLY_STRETCHED) // default 设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型


                .displayer(new RoundedBitmapDisplayer(20)) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)


                .build();


        return options;
    }


    /**
     * 展示圆形的选项
     * @return
     */
    public static DisplayImageOptions getCircleOption() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片


                .resetViewBeforeLoading(true)  // default 设置图片在加载前是否重置、复位


                .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
                .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中


                .considerExifParams(true) // default




                .imageScaleType(ImageScaleType.EXACTLY_STRETCHED) // default 设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型


                .displayer(new CircleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)


                .build();


        return options;
    }
}




-----------------------------------------------------------------------------------------




就剩主方法了



public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener {


    private XListView xlv;
    private ListView lv;
    private ViewPager vp;
    private List<String> title;
    private List<DataDataBean.DataBean> list=new ArrayList<>();
    private MyxlvAdapter myadapter;
    private List<String> alist=new ArrayList<>();
    private ImageView iv;
    private DrawerLayout dl;
    private RelativeLayout relaa;
    int NUM=1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        xlv = (XListView) findViewById(R.id.xlv);
        lv = (ListView) findViewById(R.id.lview);
        //vp = (ViewPager) findViewById(R.id.vp);
        iv = (ImageView) findViewById(R.id.iv);
        dl = (DrawerLayout) findViewById(R.id.draw);
        relaa = (RelativeLayout) findViewById(R.id.relaa);
        xlv.setPullRefreshEnable(true);
        xlv.setPullLoadEnable(true);
        xlv.setXListViewListener(this);


        iv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dl.closeDrawer(relaa);
            }
        });


        title = new ArrayList<>();
        title.add("头条");
        title.add("社会");
        title.add("国内");
        title.add("军事");
        title.add("财经");


        ArrayAdapter adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, title);
        lv.setAdapter(adapter);


        getDataFromNet();


    }


    private void getDataFromNet() {
        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {
                try {
                    String path = "http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page="+NUM;
                    URL url = new URL(path);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(5000);
                    connection.setRequestMethod("GET");
                    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) {
                Log.i("json" , s);


                Gson gson = new Gson();
                DataDataBean dataDataBean = gson.fromJson(s, DataDataBean.class);
                list.addAll(dataDataBean.getData());
                setAdapter();
                //停止加载
                xlv.stopLoadMore();


                for(int i=0;i<dataDataBean.getData().size();i++)
                {
                    alist.add(dataDataBean.getData().get(i).getImg());
                }


                //MyPagerAdapter myPagerAdapter = new MyPagerAdapter(MainActivity.this,alist);
               // vp.setAdapter(myPagerAdapter);


                //初始化小圆点
            }


            
        };
        asyncTask.execute();
    }


    private void setAdapter() {
        if (myadapter == null){


            MyxlvAdapter myadapter=new MyxlvAdapter(MainActivity.this, list);
            xlv.setAdapter(myadapter);
        }else {
            myadapter.notifyDataSetChanged();
        }
    }


    private String streamToString(InputStream inputStream, String s) {
        try {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream,s);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String string=null;
            StringBuilder stringBuilder = new StringBuilder();
            while((string=bufferedReader.readLine())!=null)
            {
                stringBuilder.append(string);
            }


            bufferedReader.close();


            return stringBuilder.toString();


        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    @Override
    public void onRefresh() {
        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {
                try {
                    String path = "http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page=1";
                    URL url = new URL(path);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(5000);
                    connection.setRequestMethod("GET");
                    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) {
                Gson gson = new Gson();
                DataDataBean dataDataBean = gson.fromJson(s, DataDataBean.class);
                list.addAll(dataDataBean.getData());
                setAdapter();


                xlv.stopRefresh();


                Date date = new Date(System.currentTimeMillis());
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                xlv.setRefreshTime(simpleDateFormat.format(date));
            }




        };
        asyncTask.execute();
    }


    @Override
    public void onLoadMore() {
        NUM++;


        getDataFromNet();
    }
}




下面是布局

主布局



<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    android:id="@+id/draw"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <RelativeLayout
        android:id="@+id/rela"
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <!--<android.support.v4.view.ViewPager-->
            <!--android:id="@+id/vp"-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="200dp"></android.support.v4.view.ViewPager>-->




        <com.bawei.administrator.lianxi_1013ev.view.XListView
            android:id="@+id/xlv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/vp"></com.bawei.administrator.lianxi_1013ev.view.XListView>


    </RelativeLayout>
    
    <RelativeLayout
        android:id="@+id/relaa"
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:background="#fff">
        
        <ImageView
            android:id="@+id/iv"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:src="@mipmap/ic_launcher"/>
        
        <ListView
            android:layout_below="@+id/iv"
            android:id="@+id/lview"
            android:layout_width="match_parent"
            android:layout_height="200dp"></ListView>
        
    </RelativeLayout>




</android.support.v4.widget.DrawerLayout>



***************************

左图右文字布局


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <ImageView
        android:id="@+id/left_iv"
        android:layout_width="100dp"
        android:layout_height="100dp" />
    <TextView
        android:id="@+id/left_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


</LinearLayout>





只有文字的布局


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">






    <TextView
        android:id="@+id/right_tv"
        android:gravity="right"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />






</LinearLayout>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会为您讲解关于AndroidViewPager和Fragment的使用。 ViewPager和Fragment是Android中非常常用的组件,他们可以一起使用来实现滑动页面效果。ViewPager是一个可以左右滑动切换页面的布局容器,而Fragment作为ViewPager的子页面,可以在ViewPager中进行动态添加和移除。 下面我们将分别介绍ViewPager和Fragment的使用。 ## ViewPager的使用 ### 1.布局文件 在布局文件中,我们需要使用ViewPager作为容器,将需要滑动切换的页面放入其中。如下所示: ``` <androidx.viewpager.widget.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` ### 2.创建Adapter 我们需要创建一个Adapter继承自PagerAdapter,并重写以下方法: ``` public class MyPagerAdapter extends PagerAdapter { private List<Fragment> mFragments; public MyPagerAdapter(List<Fragment> fragments) { mFragments = fragments; } @Override public int getCount() { return mFragments.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { Fragment fragment = mFragments.get(position); container.addView(fragment.getView()); return fragment.getView(); } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView((View) object); } } ``` ### 3.设置Adapter 在Activity或Fragment中,我们需要创建ViewPager的实例,并设置Adapter。如下所示: ``` ViewPager viewPager = findViewById(R.id.viewPager); List<Fragment> fragments = new ArrayList<>(); fragments.add(new Fragment1()); fragments.add(new Fragment2()); fragments.add(new Fragment3()); MyPagerAdapter adapter = new MyPagerAdapter(fragments); viewPager.setAdapter(adapter); ``` 这样,我们就完成了ViewPager的使用。 ## Fragment的使用 ### 1.创建Fragment 我们需要创建一个继承自Fragment的类,并重写以下方法: ``` public class Fragment1 extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment1, container, false); return view; } } ``` ### 2.布局文件 我们需要在Fragment中添加布局文件,如下所示: ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="Fragment1" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> ``` 这样,我们就完成了Fragment的使用。 ## ViewPager和Fragment的结合使用 通过以上介绍,我们已经知道了如何使用ViewPager和Fragment了。现在我们需要将它们结合起来使用。 ### 1.创建Fragment 我们需要创建多个Fragment作为ViewPager的子页面。 ### 2.创建Adapter 我们需要创建一个PagerAdapter,将Fragment添加到ViewPager中。如上所示,我们已经创建了一个MyPagerAdapter。 ### 3.设置Adapter 在Activity或Fragment中,我们需要创建ViewPager的实例,并设置Adapter。如上所示,我们已经使用ViewPager的setAdapter方法设置了MyPagerAdapter。 这样,我们就完成了ViewPager和Fragment的结合使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值