谷歌电子市场

1.小知识点

  1. 获取 当前的线程id
android.os.Process.myTid();

2. 共性问题的处理

  • 主页面几个viewPager

    -- 未加载  
            emptyLoading
    -- 加载中 
            PageLoading
    -- 加载失败
            errorLoading
    -- 加载成功
            这个不一样
    

3.UI框架的使用范围

1. 多处使用时 ,

自定义控件中获取自定义属性的两种方式

  1. 快捷方式
ratio = attrs.getAttributeFloatValue(NAMESPACE, "ratio", -1);
  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

使用:
可以给此动画添加更新监听:———方便在属性更改的时候操作
整体添加监听—————–开始,结束

实例如下:

<img src="picture/valueanima.gif"/>

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 的使用

<img src="picture/actionbar.png"/>

  • 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 的绑定

效果如下:

<img src="picture/menutoggle.gif"/>

代码如下:

/**
     * @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);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值