实习连载日记4.1-每天都是愚人节

  • BLUR效果,毛玻璃效果,模糊效果
  • drawable转bitmap
  • bitmap setPixels报java.lang.IllegalStateException异常解决方法
  • activity中获取contentView
  • animte()相关
  • webview播放视频良好js交互
  • WebView本地java方法和js之间的调用
  • setoverscroll 边界回弹
  • viewpager addpagechangedlistener

#杂谈

这些天都没有接到活,所以没怎么更新博客,心情也有些低落。

低落的是我想干活,却没有。

实习生活真轻松,上面没有活给我,我开着QQ 的远程协助,帮朋友改BUG,这个朋友长得帅,还有一身肌肉,真是颠覆大家对程序员的印象。他叫tbs,可以叫他tab,无所谓的,反正他也不看博客。

在我打字的时候,他又来找我了,QQ协助又开了。。。。。。

调好了,回来继续敲。

恩,我的能力是可以改bug的。应该是吧,可能是吧,,,可能也不是。我不知道。我没有自信。

想起了上周团建了,团建就是去怀柔玩,挺不错的,就是摄影老师不认我,根本没有我的镜头,存在感好低。不过挺好的,我喜欢这样。

就在刚才接到了第一个自己写代码的任务。写一个界面,挺简单的,就一个数据加载。好开心的说。

今天是愚人节,本想和一个妹纸表白来着,但是看QQ空间里有好多关于吐槽愚人节表白的,我也就不干了。还是再等等吧。

愚人节突然有些感想。愚人节这个节日只是人们用来讽刺自己的,其实每个人都是不愿接受现实的,当一个噩耗传来时,你永远都不会在第一时间相信的,但是当一个好消息传来的时候,你就会在第一时间接受。这是人的惯性思维,所以我宁愿蒙蔽自己,我是最棒的,也不愿承认我很垃圾这个事实。

所以说,哪天不是愚人节呢?

卧槽,我发这个帖子的时候已经过了12点了,已经不是愚人节了。。。。。。

##图片模糊效果
看到项目中有一个模糊的效果,就百度了一下,发现了好多和这个一样的帖子:
http://blog.csdn.net/sjf0115/article/details/7266998不好使
但是发现并不好使,原因很简单,这个帖子中有两种方法打到模糊的效果:
第一种,读取每个像素点周围的九个像素点,包括自己一共是九个,然后求出这九个像素点rgb值的平均值,再将这九个点的rgb设成这个平均值,来达到一种模糊的效果。为什么不管用呢?因为你只是设置了颜色而已,并没有裁剪,新的图片和旧的图片分辨率一样,只是rgb值不同,只能达到一种变暗的效果,并不能模糊。
第二种,还是读取九个像素点,但是是将这九个像素点作为一个矩阵,3x3的,去乘一个3x3的高斯矩阵,然后将结果矩阵,设置为新的rgb。这个和第一种方法一样,并没有裁剪,所以也是,只能变暗,不能模糊。
于是乎又百度到了这个:
http://www.cnblogs.com/baiyi168/p/6135255.html好使
这个就是调用了Android的原生代码,没错是Android系统自带的,RenderScript 。不过这个的缺点就是模糊的范围太窄,程度太浅。
如果想要程度深的模糊的话,需要用第三方了。我们项目里用的第三方就是fastblur。源码没看,都是一些位移操作。。。。。。

##drawable转bitmap
如何获取res文件夹下drawable文件夹下的图片资源文件转成一个BitMap对象 :

Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher); // 不存在设置默认图片

http://blog.csdn.net/u013337840/article/details/38405573android

drawable和bitmap相互转换:
很详细,我就不说了。
http://blog.csdn.net/l_lhc/article/details/50923372

##bitmap setPixels IllegalStateException
http://blog.csdn.net/u010015933/article/details/51504552
这个异常不是setPixels导致的,而知你之前createbitmap的时候导致的,看一下createbitmap的源码,观察不同的createBitmap重载函数,发现,有的返回immutable bitmap,有的返回 mutable bitmap
mutable就是可改变的,immutable就是不可改变的。而 BitmapFactory.decodeResource()返回的也是immutable,不可改变的。
不可改变的bitamp调用setPixels就会报异常。这么说虽然不准确,但是易于理解,而且大方向是正确的的。细节上是因为bitmap在createbitmap 的时候创建了副本变量,具体怎么回事我忘了,因为博客是我好几天没写,今天补的,补的时候按照之前的笔记和记忆写的,记忆的话,有些 确实不太清楚。

##获取你setcontent时的视图
这个东西是我右边ios实习那小子引导我入的坑。他是北工大的硕士。他说他一个页面设置了布局,然后另一个页面继承这个页面,另一个页面也会有这个布局吗?我就试了一下,在另一个页面试着取一下这个视图,恩,别说还真有。(记忆没错的话)

http://blog.csdn.net/lckj686/article/details/50949220
上面这个帖子讲述了setcontentview的流程,phonewindow的分析以及取出contentView。

我要说一下Window PhoneWindow DecorView之间的关系:
window类,是一个抽象类,有绘制窗口的一系列api。

PhoneWindow类,是继承自Window类的一个类,我好累。
他是所有activity都有的根视图类。他上面进行添加其他view控件。

decorView,是phone的内部类,是FrameLayout的子类,修饰一些titlebar等等,以及添加其他view等等。

参考:
http://hi.csdn.net/attachment/201111/10/0_1320932280LPp2.gif
http://www.cppblog.com/fwxjj/archive/2013/01/13/197231.html
http://www.nowamagic.net/academy/detail/50160216
http://blog.csdn.net/qinjuning/article/details/7226787
getcontentview

##属性动画简使用
就在找个简单的使用,过两天再开个帖子,发现日记贴不够用啊。
http://blog.csdn.net/recordgrowth/article/details/51058600
animte()

##webview播放视频良好js交互
http://mobile.51cto.com/abased-407001.htm
VideoEnabledWebView
作者没看明白具体怎么全屏的,我看是是通过addJavascriptInterface方法,将自己作为一个对象传过去,web端就可以调用我们Android端的组件,然后再web端用方法来全屏。具体怎么实现的是在web端。

##WebView本地java方法和js之间的调用
这个是对上面标题的解释:
http://www.oschina.net/code/snippet_232612_8531
WebView本地java方法和js之间的调用

##setoverscroll
http://blog.sina.com.cn/s/blog_5da93c8f0102uxxd.html
就是滑到边界之后,Android有个原生的效果,用不用这个效果可以设置。

##viewpager addpagechangedlistener
onPageSelected(int position),当一个新页面将要被确定下来的时候调用这个方法。其中postion代表新页面的index。

onPageScrollStateChanged(int state),在滑动状态发生改变之后会被调用。其中state有三种状态,SCROLL_STATE_DRAGGING是指当前页面正在被用户拖动;SCROLL_STATE_SETTLING则指用户的滑动动作已经结束,可以确认新页面了;SCROLL_STATE_IDLE则指当前页面处于空闲稳定的状态。
test代码:

public class MainActivity extends AppCompatActivity {
    private ViewPager viewPager;
    private List<String> list;
    private String onPageScrolled="onPageScrolled:";
    private String onPageScrollStateChanged="onPageScrollStateChanged:";

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

        viewPager = (ViewPager) findViewById(R.id.vp);
        list = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            list.add("我是第" + i + "帧");
        }
        viewPager.setAdapter(pagerAdapter);

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                //Log.i("xwq",onPageScrolled+"|position:"+position+"|positionOffset:"+positionOffset+"|positionOffsetPixels"+positionOffsetPixels);
            }

            @Override
            public void onPageSelected(int position) {
                Log.i("xwq","onPageselected:|position:"+position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                Log.i("xwq",onPageScrollStateChanged+"|state:"+state);
                //只要露另一个item的一点点,就会出现2;
                //每次滑动完,就是0,正在滑动就是1;
            }
        });

    }

    private PagerAdapter pagerAdapter = new PagerAdapter() {

        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            View pagerView = View.inflate(MainActivity.this, R.layout.item_pagerview, null);
            TextView textView = (TextView) pagerView.findViewById(R.id.tv);
            textView.setText(list.get(position));
            container.addView(pagerView,ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
            return pagerView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    };
}

main的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.xu.wencheese.pagechanged.MainActivity">

    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </android.support.v4.view.ViewPager>
</RelativeLayout>

item_pagerview.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
<TextView
    android:text="我勒个擦"
    android:id="@+id/tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</LinearLayout>

最后通过日志发现:
那个state:
//只要露另一个item的一点点,就会出现2;
//每次滑动完,就是0,正在滑动就是1;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值