Android 高级UI组件

进度条

进度条ProgressBar

android:max=“100” 最大进度如100
android:progress="50"当前进度

设置进度条样式
a)通过主题方式

style="?android:attr/progressBarStyleHorizontal"

b)通过样式资源

style="@android:style/Widget.ProgressBar.Horizontal"

实时显示
首先开一个单独的进程,循环监控耗时操作的进度,并实时更新进度条的进度setProgress(),如果完成了,通过setVisibility()方法设置进度条不显示

在这里插入图片描述
进度条实时显示

public class MainActivity extends AppCompatActivity {
private  ProgressBar bar;
private int mProgress = 0;
private Handler mHandler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.activity_main);
        bar = (ProgressBar) findViewById(R.id.bar1);
        mHandler = new Handler(){//通过匿名内部类实例化Handler,Android在运行时,不允许更新主界面组件,通过Handler发送消息解决
            @Override
            public void handleMessage(@NonNull Message msg) {//重写handleMessage方法
                if (msg.what == 0x111){
                    bar.setProgress(mProgress);
                }else {
                    Toast.makeText(MainActivity.this,"完成",Toast.LENGTH_LONG).show();
                    bar.setVisibility(View.GONE);
                }

            }
        };
        new Thread(new Runnable() {//线程
            @Override
            public void run() {
                while(true)
                {
                    mProgress = doWork();
                    Message m = new Message();//实例化消息对象
                    if(mProgress < 100)
                    {
                        m.what = 0x111;//消息
                        mHandler.sendMessage(m);//发送消息
                    }else
                    {
                        m.what = 0x110;
                        mHandler.sendMessage(m);
                        break;
                    }
                }
            }
            private  int doWork(){
                mProgress += Math.random()*10;
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return mProgress;
            }

        }).start();//开启线程
    }
}

拖动条SeekBar

android:max="10"//设置最大值
android:progress="5"//设置当前值
android:thumb="@mipmap/ic_launcher_round"/>//设置图标

.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener()//change监听器

sbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {//进度改变时触发
img.setImageAlpha(progress);//改变图片的透明度
}

星级评分条RatingBar

设置星星的多少
android:numStars=“5”

默认点亮星星
android:rating=“2”

每次可以选择的星星
android:stepSize=“1”

星星不能改变,只用于显示
android:isIndicator=“true”

获取星星的数量
String rating = String.valueOf(rbar.getRating());//获取星星的数量,并类型转换

图像视图ImageView

图片不进行等比例缩放
android:scaleType=“fitXY”

是否调整图片的宽度
android:adjustViewBounds=“true”

设置最大值,可以包裹
android:maxWidth=“100dp”
android:maxHeight=“100dp”

设置图片的颜色
android:tint="#aaff00"

图像切换器ImageSwitcher

实现手机相册功能

public class MainActivity extends AppCompatActivity {
    private int[] arrayPic = new int[]{R.mipmap.img1,R.mipmap.img2,R.mipmap.img3,R.mipmap.img4,R.mipmap.img5,R.mipmap.img6,R.mipmap.img7};
    ImageSwitcher imageSwitcher;
    private int index;
    private float touchDownX,touchUpX;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageSwitcher = findViewById(R.id.imgs);

        imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {//指定视图工厂
            @Override
            public View makeView() {//指定图片资源
                ImageView imgv = new ImageView(MainActivity.this);
                imgv.setImageResource(arrayPic[index]);
                return imgv;
            }
        });

        imageSwitcher.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction() == MotionEvent.ACTION_DOWN)
                {
                    touchDownX = event.getX();
                    return true;
                }else if(event.getAction() == MotionEvent.ACTION_UP)
                {
                    touchUpX = event.getX();
                    if (touchUpX - touchDownX > 100){//左向右滑动
                        index = index==0?arrayPic.length-1:index-1;
                        //imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.)); 设置动画资源
                        imageSwitcher.setImageResource(arrayPic[index]);
                    }else if(touchDownX - touchUpX > 100)
                    {
                        index = index==arrayPic.length-1?0:index+1;
                        imageSwitcher.setImageResource(arrayPic[index]);
                    }
                    return true;
                }
                return false;
            }
        });
    }
}

网格视图GridView
数据源需要通过Adapter 将数据显示在GridView
适配器分为4类:
ArrayAdapter 数组适配器
SimpleAdapter 简单适配器
SmipleCursorAdapter
BaseAdapter

设置网格视图的列数
android:numColumns=“3”

首先编写布局文件,用于设置单个单元格的布局 ImageView cell.xml

定义数组
定义maplist 放置图片资源
创建Adapter
设置Adapter
1、
在这里插入图片描述
2、

public class MainActivity extends AppCompatActivity {

    private  int[] pic = new int[] {R.mipmap.img1,R.mipmap.img2,R.mipmap.img3,R.mipmap.img4,R.mipmap.img5,R.mipmap.ic_launcher};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        GridView gv = (GridView)findViewById(R.id.gv);
        List<Map<String,Object>> listitem = new ArrayList<Map<String, Object>>();

        for (int i = 0;i<pic.length;i++)
        {
            Map<String,Object> map = new HashMap<String ,Object>();//定义map对象
            map.put("image",pic[i]);//将图片添加到map中
            listitem.add(map);//将map添加到list中
        }
        //参数:上下文对象,list对象,布局文件控制图片显示,字符串数组指定map中的key,整形数组指定布局文件中组件id
        SimpleAdapter simpleAdapter = new SimpleAdapter(this,listitem,R.layout.cell,new String[]{"image"},new int[]{R.id.image});
        gv.setAdapter(simpleAdapter);
    }
}

下拉列表框

1、首先在value文件夹定义数据
在这里插入图片描述
2、在activity_main中调用value

android:entries="@array/ctype"

上面两步也可以用代码实现,通过适配器

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String[] ctype = new String[]{"项目3","项目4"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,ctype);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        Spinner spinner = (Spinner) findViewById(R.id.sp);
        spinner.setAdapter(adapter);
    }
}

3、获取选取值

String str = spinner.getSelectedItem().toString();

列表视图ListView

以垂直类别的形式,列出要选择的项,可以带有图片

设置列表内容可以参考“下拉列表框”的1、2步骤

也可以通过JAVA代码实现,可以参考“下拉列表框”中使用的方法

在这里插入图片描述
实现带有图片的列表视图,并在点击时,获取点击的值
首先创建布局,用于指定每个单选项布局
在这里插入图片描述
JAVA代码

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        int[] imgid = new int[]{R.mipmap.img1,R.mipmap.img2,R.mipmap.img3};
        String[] title = new String[]{"图片1","图片2","图片3"};
        List<Map<String,Object>> listitem = new ArrayList<Map<String,Object>>();

        for (int i = 0; i < imgid.length; i++) {
            Map<String,Object> map = new HashMap<String, Object>();
            map.put("image",imgid[i]);
            map.put("name",title[i]);
            listitem.add(map);

        }

        SimpleAdapter adapter = new SimpleAdapter(this,listitem,R.layout.main,new String[]{"name","image"},new int[]{R.id.txt,R.id.img});

        ListView listView = (ListView) findViewById(R.id.lv);
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Map<String,Object> map = (Map<String, Object>) parent.getItemAtPosition(position);
                Toast.makeText(MainActivity.this,map.get("name").toString(),Toast.LENGTH_SHORT).show();
            }
        });


滚动视图ScrollView

对于页面上没有显示的内容,可以拖动滚动条

选项卡

四个步骤:
1、在布局文件中添加TabHost、TabWidget和TabContent组件
2、编写个标签页的XML文件
3、获取并初始化TabHost组件
4、为TabHost对象添加标签页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值