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

Android小课程6——ViewPager的基本使用及动态加载图片 ViewPager的基本使用及动态加载图片 阅读详情

有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>


实现多方向层叠效果的Android ViewPager卡片设计 本文还有配套的精品资源,点击获取 简介:ViewPager在Android开发中用于页面滑动切换,结合CardView可以创建具有视觉吸引力的层叠卡片效果。开发者需要理解CardView的基本用法,并自定义ViewPager的PageTransformer来控制卡片在滑动中的动画表现。实现此效果涉及自定义PageTransformer类,计算页面位置与滑动方向来调整视图属性... 阅读详情

相关推荐

Habitat-baselines v0.1.7防踩坑手把手带你跑通(全网唯一)

Habitat-baselines v0.1.7防踩坑手把手带你跑通(全网唯一)

shannanshouyin的博客 1277

Android自定义ImageView圆角

在Android项目中经常遇见圆角的图片的展示问题,但是很可惜,Android中的imageView并不是原生就支持圆角的,那么在Android中实现展示圆角图片的方式有几种呢?这里笔者大致总结一下分为以下几种以上,其中2/3是借助其他图片加载库实现,1是需要自行实现ImageView中圆角的绘制函数,4需要布局多一层嵌套。 按照最简单的做法这里推荐使用CardView的方式实现圆角。但是有时候UI设计师的设计图总是不是很如开发的口味,会出现上边需要圆角,底部无圆角的设计需求,那么这是时候,直接使用自定义I

涛的博客 3732

vasp计算练习1-Si

si的vasp训练流程

qq_41074165的博客 3301

【Android】圆角ImageView(自定义形状ImageView)

一种简洁的方法

mycocoo的博客 3780

实战分享:如何利用svchost进程绕过360防护(附完整Shellcode注入教程)

本文深入解析系统进程安全防护机制,探讨svchost等关键进程的安全特性与防护策略。详细分析安全软件的行为检测和内存保护技术,提供系统加固与监控实践建议,助力企业构建多层次防御体系,有效应对潜在安全威胁。

weixin_30752699的博客 99

嵌入式状态机编程-QP状态机框架与常见状态机方法

状态机基本术语 现态:是指当前所处的状态。 条件:又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。 传统有限状态机Fsm实现方法 如图,是一个定时计数器,计数器存在两种状态,一种为设置状态,一种为计时状态 设

qq_36969440的博客 9665

Android 自定义ImageView实现圆角

自定义圆角imageview

liuqinhou的博客 5133

[MR]RCM约束下的手术机器人

RCM(Remote Center of Motion)约束,通俗讲就是做微创手术时,机械臂插进身体,机械臂受身体的插入点的约束,不能乱动。 相关参考论文 Task Control with Remote Center of Motion Constraint for Minimally Invasive Robotic Surgery ...

土豆大叔的博客 4582

Android中实现ImageView圆角化的几种 方式

开发中我们经常在显示图片相关需求的时候需要加载圆角图片,下面几种方式来实现图片的圆角化。 1:第一种方式是本人比较推荐的,直接在需要加载的图片外部嵌套一层CardView控件来实现图片 的圆角化,因为写起来简单,而且在项目中可以使用第三方开源库如Glide,ImageLoader等来加载动态图之类的 不会出现什么问题,如果使用第3种方式来实现的话就很容易出问题。 <android.support.v7.widget.CardView android:id="@+id/img_item

AndyYuan317的博客 1万+

香橙派5B-RK3588-NPU内核升级至0.9.8:RKLLM多模态部署实战

本文详细介绍了香橙派5B-RK3588设备NPU内核升级至0.9.8版本的完整流程,重点讲解了升级的必要性、两种升级方案(预编译包安装与自行编译内核)以及RKLLM SDK的安装配置。通过实战演示多模态模型转换与推理,显著提升AI计算性能,为嵌入式AI部署提供实用指南。

salt9的博客 1027

芒果YOLO11改进23:主干Backbone篇GhostNet:原创改进高效 GhostNet 网络,华为出品,打造全新检测器

主干Backbone篇GhostNet:原创改进高效 GhostNet 网络,华为出品,打造全新检测器

包括YOLOv5、YOLOv7、YOLOv8等模型改进 406

Android:圆角图片 NiceImageView

public class NiceImageView extends AppCompatImageView { private Context context; private boolean isCircle; // 是否显示为圆形,如果为圆形则设置的corner无效 private boolean isCoverSrc; // border、inner_border是否覆盖图片 private int borderWidth; // 边框宽度 private .

baidu_24743861的博客 1408

【WLAN】【基础知识】WIFI那些事儿之信道和频谱(涵盖2.4G、5G、6G,全网最全)

- 从事WIFI相关开发或测试工作,经常要和信道、频宽、频率等打交道,本文仅将平时涉及的2.4G、5G、6G的信道、频宽、频率等做一总结。 - 一图胜万言,本文汇总了工作中经常用到的频谱图,保证全网最全!!! - 本博客地址,https://blog.youkuaiyun.com/qxhgd,欢迎各位关注,转发请注明出处。

一介草民,只为生活。 1万+

XlistView刷新加载和Banner轮播

public class ChildFrag2 extends Fragment implements XListView.IXListViewListener { private String urlstrs = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1"; private String[] urls1 = ...

weixin_40865431的博客 305

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Android自定义弧形ViewPager

先上效果图 实现起来比较简单。 实现思路 自定义弧形View。如下所示。 圆和屏幕相交的地方就是我们所需要的弧形,当然也可以使用贝塞尔曲线绘制。 半径为测量布局宽度*2 绘制过程如下: @Override protected void onDraw(Canvas canvas) { canvas.drawCircle(mCustomWidth / 2, mCustomHeight ...

WormholeStack 3470

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android 弧形ViewPager 和弧形HeaderView

先来看效果:虽然效果还不错,但是有瑕疵,有两个明显的缺陷:底部的圆弧不是正圆弧:如上图所示,弧形有点歪,特别是在小屏幕手机上表现尤为明显,因为是用二阶贝塞尔曲线绘制的圆弧,不管怎么调整控制点,都不会是一个正圆弧,如下图:  圆弧不能设置图片背景:前面的这个版本,弧形背景只能设置颜色,不能设置背景图1. 升级版ArcView实现思路既然有了上面说的2个缺点,我们就要想办法解决它,2个问题我们逐个分析...

dengpeng_的博客 1305

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

android viewpager动态加载图片,Android使用ViewPager加载图片和轮播视频

作为Android基础组件之一,大家对viewpager已经很熟悉了,网上也有很多使用viewpager来加载图片的案例。但是像微信那样点击图片,可以轮播显示图片和视频的例子却没找到。正巧项目中有需求,可以就花时间写了下,现在给一下核心代码,希望对有此需求的同学们起一个抛砖引玉的作用。话不多说了,上代码:以下是initData的代码public void initData() {//把聊天界面的图...

weixin_29202687的博客 595

【Android 基础】ListView中使用ImageLoader

演示效果: ImageLoader体验还是不错的。准备工作0)准备demo中展示的图片链接(我用python在新浪某个网页爬下来的图片链接。public class Constants { public static final String[] IMAGES = new String[]{ "http://n.sinaimg.cn/news/20170106/cO

Veyron_wu 553

android 使用viewpager实现图片轮播效果

第一步:创建xml布局,如下图所示; <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" a

julicliy的博客 5148

Android中使用ViewPager实现图片的切换

主要包含三步,配置布局文件,设置MainActivity类,配置适配器类 .xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"

suwu150 1523

Android利用ViewPager实现图片浏览,解决内存问题

在Android开发中,我们经常遇到利用Viewpager实现图片浏览的需求,这个很好实现,也没什么技术难点,但是最近我在实现这个功能的时候,遇到了一些问题,当图片数量稍微多点时,一直滑动浏览,会导致内存占用一路走高,最终导致oom,在分析了只有,发现是因为viewpager中给的ImageIView一直在新建导致的内存溢出,最后找到了解决方法,让view实现复用,解决了内存问题,代码也比较简单,

Vanswells的博客 2497

Android圆角ViewGrup/View库(可加边框),妈妈再也不用担心设计圆角了!

项目地址:RoundCorners 比较常用的ViewGroup和View的圆角实现(可加边框),一发治好设计的圆角病。 Demo 效果预览 特点 LinearLayout、RelativeLayout、FrameLayout、ViewPager支持圆角 ImageView、TextView、View、Button支持圆角 CircleImageView...

Steins Gate 2839

Android 之 ViewPager 的简单使用

ViewPager就是一个简单的页面切换组件,我们可以往里面填充多个View,然后我们可以左 右滑动,从而切换不同的View,我们可以通过setPageTransformer()方法为我们的ViewPager 设置切换时的动画效果,当然,动画我们还没学到,所以我们把为ViewPager设置动画 放到下一章绘图与动画来讲解!

leyang0910的博客 5565

Android菜鸡的提升之路---ViewPager艺术(实现简单的图片展示器)_安卓 viewpager 展示图片

先说一下思路:首先在ViewPager中加载三张图片,这里用的是动态添加控件的方法,然后就是放小点点,点其实是图,用ps自己画的,在布局里面把点放在对应的位置,小红点的转换思路:利用ViewPager中OnPagerChangeListener(页面变化监听时间),当滑动到第二个页面的时候把中间的点变红,其它的变灰。

2401_87255264的博客 460

Android之ViewPager实现图片无限循环轮播

很久没有写博客了,之前花时间写了一个Viewpager实现的无限图片轮播,个人感觉还是很好用的QAQ,源码和思路都还算清晰 实现的效果图如下: 这里要补充一下,在这个项目中我把图片轮播写进了一个Viewholder里内嵌在了Recyclelistview里。但本文只介绍图片轮播部分的实现: 整体思路:使用handler的延时发送方法(sendEmptyMessageDelayed)实

化身孤岛的瓜 2万+

Android中ViewPager的简单使用(底部圆点)

http://blog.youkuaiyun.com/tibib/article/details/8724281高效显示Bitmap系列的学习、翻译文章还没有写完,估计这个礼拜末能结束吧~ android.support.v4.ViewPager类在 API 4+ Support  支持包中开始为我们提供,它可以让我们有能力左右滑动以'页'的形式展示数据。我们可以通过继承  PagerAdapter

Tibib的专栏 1万+
上一篇: 初学Android之Tablayout+Fragment+ImageLoader(低仿知乎)
下一篇: 初学Android之PullToRefresh+listview+ViewPager
风偏偏
博客等级 码龄9年 2粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值