Android高级控件之RecycleView,Gallery,ViewPage

来源:互联网 发布:淘宝怎么注销账号 编辑:程序博客网 时间:2024/06/03 08:38

1.RecycleView

   在使用RecycleView之前,需要导入一个资源,--添加RecyclerView引用:compile 'com.android.support:recyclerview-v7:24.0.0-alpha1'(build.gradle),在你搭建的项目中找到build.gradle.

dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile project(':pulltorefresh')    compile 'com.android.support:appcompat-v7:26.+'    compile 'com.android.support.constraint:constraint-layout:1.0.2'    compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'    testCompile 'junit:junit:4.12'}
你导入的资源需要与你上面的资源相结合,26与26要相对应,如果你不对应的话就会报错。

通过使用recycleview可控制界面的是网格还是线性布局,一步到位,就不需要像以前那样要写两个界面了。

     <1>布局方式:LayoutManager
横向布局 
垂直布局
网格布局Grid
<2>分割线:ItemDecoration
Github托管源码:https://github.com/yqritc/RecyclerView-FlexibleDivider


下面为布局文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayout    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"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.g160828_android09_widget.MainActivity"><android.support.v7.widget.RecyclerView    android:layout_width="match_parent"    android:layout_height="match_parent"    android:id="@+id/rv_main_recycleview"    ></android.support.v7.widget.RecyclerView></LinearLayout>

布局文件相对应的java文件:

package com.example.g160828_android09_widget;import android.os.AsyncTask;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;import com.handmark.pulltorefresh.library.PullToRefreshBase;import com.handmark.pulltorefresh.library.PullToRefreshListView;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class MainActivity extends AppCompatActivity {    private String titles[]={"愤怒的老鸟","Tomcat","KFC","大黑牛","旺财","中国龙","北京烤鸭","蜡笔小新","7秒小金鱼","九尾狐","蜡笔小新","7秒小金鱼","九尾狐"};    private int images[]={R.drawable.bird,R.drawable.cat,R.drawable.chicken,R.drawable.cow,R.drawable.dog,R.drawable.dragon,R.drawable.duck,R.drawable.elephant,R.drawable.fish,R.drawable.fox,R.drawable.elephant,R.drawable.fish,R.drawable.fox};    private RecyclerView rv_main_recycleview;    private List<String> list;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);       rv_main_recycleview = (RecyclerView) findViewById(R.id.rv_main_recycleview);        list = new ArrayList<>();        for (int i = 0; i <10 ; i++) {            list.add("aa"+i);        }        rv_main_recycleview.setAdapter(new MyAdapter());        //排列方式       // rv_main_recycleview.setLayoutManager(new LinearLayoutManager(this, LinearLayout.HORIZONTAL,false));        rv_main_recycleview.setLayoutManager(new GridLayoutManager(this,2,GridLayoutManager.VERTICAL,false));    }    class MyAdapter extends RecyclerView.Adapter{        //内部内        class MyViewHolder extends RecyclerView.ViewHolder{           private TextView textview;            public MyViewHolder(View itemView) {                super(itemView);                textview=(TextView) itemView.findViewById(android.R.id.text1);            }        }        @Override        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {          View view=getLayoutInflater().inflate(android.R.layout.simple_list_item_1,null);            return new MyViewHolder(view);        }        @Override        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {                MyViewHolder MyHolder= (MyViewHolder) holder;                MyHolder.textview.setText(list.get(position));        }       //返回集合的大小        @Override        public int getItemCount() {            return list.size();        }    }    }


2.Gallery(画廊)--已过时


package com.zking.administrator.g160828_android09_widgetplus;


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;


public class GalleryActivity extends AppCompatActivity {


    private Gallery g_gallery_image;
    private int images[]={R.drawable.image1,R.drawable.image4,R.drawable.image3};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);
        g_gallery_image = (Gallery) findViewById(R.id.g_gallery_image);
        g_gallery_image.setAdapter(new MyAdapter());
    }


    class MyAdapter extends BaseAdapter{


        @Override
        public int getCount() {
            return images.length;
        }


        @Override
        public Object getItem(int position) {
            return images[position];
        }


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


        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView=new ImageView(GalleryActivity.this);
            imageView.setImageResource(images[position]);
            return imageView;
        }
    }

}



3.ViewPage

我们最长用的一个控件,它可以实现布局跳布局、页面跳页面,不过我们比较常用的还是页面跳页面,微信中的滑动就是通过这个方法让实现的。所以我们需要好好掌握这一个知识点。

  <1>引导页
适配器   PagerAdapter
滑动监听 addOnPageChangeListener
导航点   github开源框架:ViewPagerIndicator
属性:
setRadius:设置半径
setPageColor:点的背景颜色
setBackgroundColor:控件的背景颜色
setFillColor:设置点的背景颜色
setStrokeColor:设置点背景的边框颜色
进入主界面
<2>主界面框架 


代码如下:

package com.example.g160828_android09_widget;import android.app.LocalActivityManager;import android.content.Intent;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import java.util.ArrayList;import java.util.List;public class ViewpageActivity extends AppCompatActivity {    private ViewPager vp_main_viewpage;    private int images[]={R.drawable.yd2,R.drawable.yd3,R.drawable.yd4,};    private List<View> listview= new ArrayList<>();    private LocalActivityManager localactivitymanager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_viewpage);        vp_main_viewpage = (ViewPager) findViewById(R.id.vp_main_viewpage);//        for (int i = 0; i < images.length; i++) {//            ImageView imageview= new ImageView(this);//            imageview.setImageResource(images[i]);//            listview.add(imageview);//        }////          //布局跳布局//        View vs1=getLayoutInflater().inflate(R.layout.activity_ver,null);//        listview.add(vs1);//        View vs2=getLayoutInflater().inflate(R.layout.activity_gr,null);//        listview.add(vs2);//        //界面跳界面        localactivitymanager = new LocalActivityManager(this,true);        localactivitymanager.dispatchCreate(savedInstanceState);        Intent intent=new Intent(getApplicationContext(),VerActivity.class);        listview.add(localactivitymanager.startActivity("ViewpageActivity",intent).getDecorView());        Intent intend1=new Intent(getApplicationContext(),MainActivity.class);        listview.add(localactivitymanager.startActivity("MainActivity",intend1).getDecorView());        vp_main_viewpage.setAdapter(new MyAdapter());    }    class MyAdapter extends PagerAdapter{        @Override        public int getCount() {            return listview.size();        }        @Override        public boolean isViewFromObject(View view, Object object) {            return view==object;        }        @Override        public Object instantiateItem(ViewGroup container, int position) {          View v=listview.get(position);            container.addView(v);            return v;        }        @Override        public void destroyItem(ViewGroup container, int position, Object object) {           // super.destroyItem(container, position, object);            View v=listview.get(position);            container.removeView(v);        }    }}

原创粉丝点击