热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安卓自定义控价学习笔记(一)

一.自定义控件原生控件(imageview,button,textview)自定控件组合控件自己绘制的控件(绘制,行为操作)(一).

一.自定义控件
  1. 原生控件(imageview,button,textview)
  2. 自定控件
    1. 组合控件
    2. 自己绘制的控件(绘制,行为操作)

(一).View和ViewGroup

这里写图片描述

  1. 关系view和viewGroup

    1. 继承关系
    2. 组合关系
      这里写图片描述

      <LinearLayout>
      <RelativeLayout>
      <ImageView/>
      <LinearLayout/>
      RelativeLayout>
      <Button/>
      LinearLayout>
  2. 作用

    1. view: 提供实际的功能,提供了绘制的样式
    2. viewGroup:管理子控件,位置,大小
  3. View的形状: 方形

  4. 布局的层次: 后布局的在最上面一层
  5. View的绘制流程(相对性)

    1. mearsue: 测量,final,控制控件的大小
    2. layout: 布局,用来控制自己的布局位置
    3. draw: 绘制,用来控制控件的显示样式

    mearsure –> layout —> draw

    1. onMearsure:
    2. onLayout:
    3. onDraw:

    4. setMeasuredDimension(width,height): 用来设置自己的大小

    5. ViewGroup.onMeasure(): 给出孩子的期望大小值,设置自己大小的准确值

(二).ViewPager的使用案列

1. 案列功能分析:

  1. 滑动的切换图片
  2. 滑动时圆形点的切换
  3. 滑动文本的切换
  4. 无限滑动
    5.案列截图
    这里写图片描述

2. 案列源码

MainActivity代码
package com.example.viewpageapp;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

public class MainActivity extends Activity implements OnPageChangeListener
{
private static final String TAG = "MainActivity";
private ViewPager mPager;
private LinearLayout mPointContainer;
private TextView mTvTitle;

private List mListDatas;

int[] imgs = { R.drawable.icon_1, R.drawable.icon_2, R.drawable.icon_3,
R.drawable.icon_4, R.drawable.icon_5 };
String[] titles = { "为梦想坚持", "我相信我", "就是明天", "google IO", "未来不是梦" };

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mPager = (ViewPager) findViewById(R.id.pager);
mPointCOntainer= (LinearLayout) findViewById(R.id.point_container);
mTvTitle = (TextView) findViewById(R.id.tv_title);

//初始化数据
mListDatas = new ArrayList();
for (int i = 0; i {
//给集合添加ImageView
ImageView iv = new ImageView(this);
iv.setImageResource(imgs[i]);
iv.setScaleType(ScaleType.FIT_XY);

mListDatas.add(iv);

//添加点
View point = new View(this);
point.setBackgroundResource(R.drawable.point_normal);
LayoutParams params = new LayoutParams(10, 10);
if (i != 0)
{
params.leftMargin = 10;
}
else
{
point.setBackgroundResource(R.drawable.point_selected);
mTvTitle.setText(titles[i]);
}
mPointContainer.addView(point, params);
}

//设置数据的方式
mPager.setAdapter(new MyAdapter());

//设置监听器
mPager.setOnPageChangeListener(this);

//设置默认选中中间的item
int middle = Integer.MAX_VALUE / 2;
int extra = middle % mListDatas.size();
int item = middle - extra;
mPager.setCurrentItem(item);
}

class MyAdapter extends PagerAdapter
{
//页面的数量
@Override
public int getCount()
{
if (mListDatas != null)
{
return Integer.MAX_VALUE;
}
return 0;
}

// 标记方法,用来判断缓存标记
@Override
public boolean isViewFromObject(View view, Object object)
{
return view == object;
}

//初始化item
@Override
public Object instantiateItem(ViewGroup container, int position)
{
position = position % mListDatas.size();
//position: 要加载的位置
ImageView iv = mListDatas.get(position);
//用来添加要显示的View的
mPager.addView(iv);
//记录缓存标记--return 标记
return iv;
}

//销毁item条目
@Override
public void destroyItem(ViewGroup container, int position, Object object)
{
//销毁移除item
//object:标记
position = position % mListDatas.size();
ImageView iv = mListDatas.get(position);
mPager.removeView(iv);
}
}

//回调方法,当viewpager滚动时的回调
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels)
{

//position: 当前选中的位置
//positionOffset: 滑动的百分比
//positionOffsetPixels: 偏移的距离,滑动的像素
//Log.d(TAG, "onPageScrolled : " + positionOffsetPixels + " "
//+ positionOffset);
}

//回调方法,当viewpager的某个页面选中时的回调
@Override
public void onPageSelected(int position)
{
//Log.d(TAG, "onPageSelected : " + position);
position = position % mListDatas.size();
//设置选中的点的样式
int count = mPointContainer.getChildCount();
for (int i = 0; i {
View view = mPointContainer.getChildAt(i);
view.setBackgroundResource(position == i ? R.drawable.point_selected
: R.drawable.point_normal);
}
mTvTitle.setText(titles[position]);
}

//回调方法,当viewpager的滑动状态改变时的回调
//@see ViewPager#SCROLL_STATE_IDLE : 闲置状态
//@see ViewPager#SCROLL_STATE_DRAGGING :拖动状态
//@see ViewPager#SCROLL_STATE_SETTLING: 固定状态
@Override
public void onPageScrollStateChanged(int state)
{
//Log.d(TAG, "onPageScrollStateChanged : " + state);
}
}
layout布局代码
    xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:cOntext=".MainActivity" >
android:layout_
android:layout_ >
android:id="@+id/pager"
android:layout_
android:layout_ >

android:layout_
android:layout_
android:layout_alignParentBottom="true"
android:background="#33000000"
android:orientation="vertical"
android:padding="5dp" >
android:id="@+id/tv_title"
android:layout_
android:layout_
android:layout_gravity="center_horizontal"
android:text="图片的title"
android:textColor="@android:color/white" />
android:id="@+id/point_container"
android:layout_
android:layout_
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dp"
android:orientation="horizontal" >




drawable内代码
选中时

android:shape="oval" >



未选中时

android:shape="oval" >



AndroidManifest.xml代码

package="com.example.viewpageapp"
android:versiOnCode="1"
android:versiOnName="1.0" >

android:minSdkVersion="8"
android:targetSdkVersion="18" />

android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
android:name="com.example.viewpageapp.MainActivity"
android:label="@string/app_name" >









推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
author-avatar
重报礼坊官肀网
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有