1.小知识点
- 获取 当前的线程id
android.os.Process.myTid();
2. 共性问题的处理
主页面几个viewPager
-- 未加载 emptyLoading -- 加载中 PageLoading -- 加载失败 errorLoading -- 加载成功 这个不一样
3.UI框架的使用范围
1. 多处使用时 ,
自定义控件中获取自定义属性的两种方式
- 快捷方式
ratio = attrs.getAttributeFloatValue(NAMESPACE, "ratio", -1);
麻烦方式
1.先获取自定义属性的 对应名字的 数组, 2.从数组中获取相应的值 , 3. 回收数组,提高性能
TypedArray typeArray = context.obtainStyledAttributes(attrs,R.styleable.RatioLayout);
ratio = typeArray.getFloat(R.styleable.RatioLayout_ratio, -1);
typeArray.recycle();
4. 轮播图按下暂停的处理
原理介绍:给viewpager 设置触摸监听
vp_tabdetail.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 移除消息
mHandler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_CANCEL:
mHandler.sendEmptyMessageDelayed(0, 3000);
break;
case MotionEvent.ACTION_UP:
mHandler.sendEmptyMessageDelayed(0, 3000);
break;
}
return false;
}
});
5.属性动画
介绍:
就是一个值 从 多少—–变化到—-多少
比如: int 类型的从0----1000
使用:
可以给此动画添加更新监听:———方便在属性更改的时候操作
整体添加监听—————–开始,结束
实例如下:
ValueAnimator animator = null;
if (isOpen) {
// 关闭
isOpen = false;
// 属性动画
animator = ValueAnimator.ofInt(mDesHeight, 0);// 从某个值变化到某个值
} else {
// 开启
isOpen = true;
// 属性动画
animator = ValueAnimator.ofInt(0, mDesHeight);
}
// 动画更新的监听
animator.addUpdateListener(new AnimatorUpdateListener() {};
animator.addListener(new AnimatorListener() {};
//最重要的两点---------设置时间 和开启动画
animator.setDuration(200);// 动画时间
animator.start();// 启动动画
6.代码中测量虚拟 控件的高
原理介绍:
就是指定模式高和模式宽
按照制定的模式(就是自己写的模式),得到相应的宽和高
/**
* @Description: TODO获取7行TextVeiw的高度
* @return
*/
public int getShortHeight() {
// 模拟一个textView ,设置最大行数为7 行,计算虚拟tv的高度
TextView tv = new TextView(UIUtils.getContext());
tv.setMaxLines(7);
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
tv.setText(getData().des);
// 设置模式 高 和宽
int width = MeasureSpec.makeMeasureSpec(tvDes.getWidth(),
MeasureSpec.EXACTLY); // 确切模式
int height = MeasureSpec.makeMeasureSpec(2000, MeasureSpec.AT_MOST); // 至多模式,相当于包裹内容
tv.measure(width, height);
return tv.getMeasuredHeight();
}
7. 显示7行bug问题,少于7行的也显示了7行
解决方案:
// 放在消息队列中运行, 解决当只有三行描述时也是7行高度的bug
tvDes.post(new Runnable() {
@Override
public void run() {
// 默认展示7行的高度
int shortHeight = getShortHeight();
mParams = (LinearLayout.LayoutParams) tvDes.getLayoutParams();
mParams.height = shortHeight;
tvDes.setLayoutParams(mParams);
}
});
8.AcionBar 的使用
actionBar区域的处理(logo 的处理)
先得到ActionBar ,然后上不上由你决定(处理)
ActionBar actionBar = getActionBar();
actionBar.setTitle("测试");
actionBar.setLogo(R.drawable.dss);
actionBar.setHomeButtonEnabled(true); //logo可以点击
actionBar.setDisplayHomeAsUpEnabled(true); //展示返回键
actionBar.setDisplayShowHomeEnabled(true); //logo 显示
Menu 区的处理
第一点:R.menu.main的创建(泡妞第一步,聊微信,约出来)
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_settings"
android:icon="@drawable/dss"
android:orderInCategory="100"
android:showAsAction="always"
android:title="设置"/>
<item
android:id="@+id/clickme"
android:orderInCategory="100"
android:showAsAction="never"
android:title="点我"/>
<item
android:id="@+id/watchbigpic"
android:orderInCategory="100"
android:showAsAction="never"
android:title="看大片"/>
</menu>
第二点: 创建menu -----(想泡妞,当然先约到宾馆了)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
第三点:点击事件的处理----(到床上了都,要做神马你随意)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
Toast.makeText(getApplicationContext(), "我是设置自", Toast.LENGTH_SHORT)
.show();
break;
case R.id.clickme:
Toast.makeText(getApplicationContext(), "我是点我", Toast.LENGTH_SHORT)
.show();
break;
case R.id.watchbigpic:
Toast.makeText(getApplicationContext(), "我是看大片", Toast.LENGTH_SHORT)
.show();
break;
}
return super.onOptionsItemSelected(item);
}
9.actionBar 与 Drawable 的绑定
效果如下:
代码如下:
/**
* @Description: TODO 初始化ActionBar
*/
private void initActionBar() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer);
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true); // logo可点击
actionBar.setDisplayHomeAsUpEnabled(true); // 返回上一界面 显示
toggle = new ActionBarDrawerToggle(this, drawer,
R.drawable.ic_drawer_am, R.string.drawer_open,
R.string.drawer_close);
toggle.syncState(); // 将DrawerLayout 与 开关绑定
}
//监听开关-------------状态
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// 开关抽屉
toggle.onOptionsItemSelected(item);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}