频道栏目
首页 > 程序开发 > 移动开发 > Android > 正文
安卓_Fragment通信 menu菜单 补间动画 属性动画 通知栏
2016-10-19 09:23:42         来源:心志恒  
收藏   我要投稿

1.照相和录像

//实现照相
public void click1(View v) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File file = new File(Environment.getExternalStorageDirectory().getPath(), "tu.png");
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
    startActivityForResult(intent, 1);
}
//实现录像
public void click2(View v) {
    Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    File file = new File(Environment.getExternalStorageDirectory().getPath(), "to.mp4");
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
    startActivityForResult(intent, 1);
}

2.fragment的入门

fragment理解成是Activity的一部分. 

fragment必须嵌入到Activity里 .

fragment的生命周期和受到Activity的影响

ViewGroup :五大布局 可以有自己的孩子.

Fragment这个技术是在Android3.0被引进

在布局里面声明fragment

1.
2.
6.    
11.    
16.


fragment里面的name属性:要指定你声明的fragment,就是要加载这个fragment

  声明fragment

1.//fragment代表Activity的一部分
2.public class Demo1Fragment extends Fragment {
3.
4.  //在这个方法里面初始化Fragment要展示的内容  相当于Activity的onCreate方法
5.  @Override
6.  public View onCreateView(LayoutInflater inflater, ViewGroup container,
7.          Bundle savedInstanceState) {
8.      //[1]通过一个布局填充器 把一个布局转换成一个view对象
9.      View view = inflater.inflate(R.layout.fragment_demo1, null);
10.     
11.     return view;
12. }
13. 
14.}

3. 动态添加fragment

学过的manager: smsManager  telephoneManager windowManager fragmentManager  notifationManager  packageManager     ,ActivityManager.

public class MainActivity extends Activity {

    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //[1]获取手机分辨率
        WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        int width = wm.getDefaultDisplay().getWidth();
        int height = wm.getDefaultDisplay().getHeight();
        //[2]获取fragment的管理者
        FragmentManager fragmentManager = getFragmentManager();
        //[3]开启事务
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        //说明是竖屏  当是竖屏的时候我加载一个fragment ★Android.代表都是系统定义好的 android.R.id.content:理解成是当前手机的窗体
        if (width < height) {
            transaction.replace(android.R.id.content, new Fragment_Demo1());
            //说明是横屏 当是横屏的时候加载另外一个fragment
        }else {
            transaction.replace(android.R.id.content, new Fragment_Demo2());
        }
        //[4]一定要记得提交beginTransaction
        transaction.commit();
    }


}

4. 模拟一个微信的主页面

public void onClick(View v) {
    // 获取fragment管理
    FragmentManager manager = getFragmentManager();
    // 开启事务
    FragmentTransaction transaction = manager.beginTransaction();

    switch (v.getId()) {
    case R.id.bu_1:
        transaction.replace(R.id.ll, new Fragment_wx());
        break;
    case R.id.bu_2:
        transaction.replace(R.id.ll, new Fragment_friend());
        break;
    case R.id.bu_3:
        transaction.replace(R.id.ll, new Fragment_discover());
        break;
    case R.id.bu_4:
        transaction.replace(R.id.ll, new Fragment_me());
        break;
    }
    transaction.commit();
}   

5. fragment兼容低版本

[1]就是使用v4包中的fragment

[2]mainactivity要继承FragmentActivity

[3]获取Fragment的管理者方式不一样了

   FragmentManager supportFragmentManager = getSupportFragmentManager();

public class MainActivity extends FragmentActivity {

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

    }

    public void click1(View v) {
        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction beginTransaction = manager.beginTransaction();
        beginTransaction.replace(R.id.ll, new Fragment_wx());
        beginTransaction.commit();
    }

    public void click2(View v) {
        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction beginTransaction = manager.beginTransaction();
        beginTransaction.replace(R.id.ll, new Fragment_friend());
        beginTransaction.commit();
    }

6.Fragment的生命周期

生命周期虽然很多 但是在实际开发中我们只需要重写2个方法就可以了 onCreteView和onDestroy方法

7. Fragment的通信

 Fragment有一个公共桥梁 ---->Activity 
代码1:
public class Fragment_1 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_demo, null);
        Button bu = (Button) view.findViewById(R.id.bu);
        //获取点击事件
        bu.setOnClickListener(new OnClickListener() {
            @Override
            //[3]修改另外一个Fragment的的textview 的内容
            public void onClick(View v) {
                Fragment_2 fragment = (Fragment_2) getActivity().getFragmentManager().findFragmentByTag("1");
                fragment.update("我是刘");
            }
        });
        return view;

    }
}

。。。。 。。。。。。。。。。。。。。。。。。。。

代码2:
public class Fragment_2 extends Fragment {
private TextView tv;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        //[1]通过一个布局填充器 把一个布局转换成一个view对象
        View view = inflater.inflate(R.layout.fragment_demo1, null);
        tv = (TextView) view.findViewById(R.id.tv);
        return view;
    }
    //更新textview的方法
    public void update(String st) {
        tv.setText(st);
    }
}
main方法中
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // [1]获取Fragment的管理者
    FragmentManager manager = getFragmentManager();
    FragmentTransaction beginTransaction = manager.beginTransaction();
    // [2]动态替换
    beginTransaction.replace(R.id.ll_1, new Fragment_1(), "2");
    beginTransaction.replace(R.id.ll_2, new Fragment_2(), "1");
    beginTransaction.commit();
}

8. menu菜单

添加菜单的方式
public class MainActivity extends Activity {

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

    // 当点击手机上的menu菜单执行
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // getMenuInflater().inflate(R.menu.main, menu);
        menu.add(1, 1, 0, "首页");
        menu.add(1, 2, 0, "前进");
        return true;
    }

    // 当想要知道具体菜单的哪个条目被选中 需要重写下面这个方法
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        switch (id) {
        case 1:
            System.out.println("111");
            break;
        case 2:
            System.out.println("222");
            break;
        }

        return super.onOptionsItemSelected(item);
    }

    // 当用户打开菜单的面板 这个方法就会执行

    @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
        AlertDialog.Builder builder = new Builder(this);
        builder.setTitle("警告");
        builder.setMessage("禁止下载");
        builder.setPositiveButton("确定", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });

        builder.setNegativeButton("取消", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        builder.show();
        return false;

    }

}

9. Android补间动画

[1]补间动画

位移

1.//创建一个位移动画 最后一个参数 慎用整数
2.      TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 0.2f);
3.      // [2]设置动画执行的时长
4.      ta.setDuration(2000);
5.      
6.      //当动画执行完毕后 停留在结束位置 
7.      ta.setFillAfter(true);
8.      // [3]iv执行动画
9.      iv.startAnimation(ta);

旋转

1.  RotateAnimation ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
2.      // [2]设置动画执行的时长
3.      ra.setDuration(2000);
4.      // [3]设置动画执行重复次数
5.      ra.setRepeatCount(1);
6.      // [4]设置重复的模式
7.      ra.setRepeatMode(Animation.REVERSE);
8.      // [3]iv执行动画
9.      iv.startAnimation(ra);

缩放

1.// 缩放(放大 缩小)1.0默认
2.      ScaleAnimation sa = new ScaleAnimation(1.0f, 3.0f, 1.0f, 3.0f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
3.      // [2]设置动画执行的时长
4.      sa.setDuration(2000);
5.      // [3]设置动画执行重复次数
6.      sa.setRepeatCount(1);
7.      // [4]设置重复的模式
8.      sa.setRepeatMode(Animation.REVERSE);
9.      // [3]iv执行动画
10.     iv.startAnimation(sa);

透明

1.//[1]创建一个透明动画  1.0代表完全不透明  0.0完全透明
2.      AlphaAnimation aa = new AlphaAnimation(1.0f, 0.0f);
3.      //[2]设置动画执行的时长
4.      aa.setDuration(2000);
5.      //[3]设置动画执行重复次数 
6.      aa.setRepeatCount(1);
7.      //[4]设置重复的模式
8.      aa.setRepeatMode(Animation.REVERSE);
9.      //[3]iv执行动画
10.     iv.startAnimation(aa);


//综合,创建一个动画集合
public void click5(View v) {
    AnimationSet set = new AnimationSet(true);
    set.addAnimation(ts);
    set.addAnimation(ra);
    set.addAnimation(sc);
    iv.startAnimation(set);

}

动画合集

补间动画的原理 :只是产生了一个动画效果而已 ,相当于孙悟空使用的障眼法.

10. 应用的反编译

 apktools :获取apk资源文件(图片资源 布局资源 Android的清单文件)

 dex2jar: 通过这个工具查看apk的源码

 jd.exe:可以查看源码 

11. 实现补间动画的第二种方式(使用xml来定义)

[1]res下创建一个anim目录

[2]在anim目录下创建对应的动画

// 点击按钮实现一个透明动画的效果
public void click1(View v) {

    // [1]使用工具类来加载动画
    Animation aa = AnimationUtils.loadAnimation(getApplicationContext(),
            R.anim.alpha);
    // [2]iv执行动画
    iv.startAnimation(aa);

}

12. 通知栏

 给用户友好提示 

 [1]Toast 

 [2]对话框

 [3]通知栏  

public class MainActivity extends Activity {

    private NotificationManager nm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 获取通知的管理
        nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    }

    public void click1(View v) {
        // [0]创建Notification实例 链式调用:
        /*
         * Notification noti = new Notification.Builder(this)
         * .setContentTitle("我是大标题") .setContentText("我是大标题的内容")
         * .setSmallIcon(R.drawable.ic_launcher)
         * .setLargeIcon(BitmapFactory.decodeResource(getResources(),
         * R.drawable.ic_launcher)) .build();
         */
        // [0]在实际开发中为了兼容低版本 我们可以使用过时的方法
        Notification noti = new Notification(R.drawable.ic_launcher, "收到信息",
                System.currentTimeMillis());
        // 当接收到通知 让手机震动 发出声音 让手机的呼吸灯亮
        noti.defaults = Notification.DEFAULT_ALL;
        // 当接收到通知 不让通知清除
        noti.flags = Notification.FLAG_NO_CLEAR;
        Intent intent = new Intent(); intent.setAction(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:"+111));
        PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 1, intent, Intent.FLAG_ACTIVITY_NEW_TASK );
        // [0.3]当点击通知做对应的事情
        noti.setLatestEventInfo(this, "小芳", "老地方见", contentIntent);

        nm.notify(10, noti);

    }

    public void click2(View v) {
        nm.cancel(10);
    }

}

1.补间动画
位移 缩放 旋转 透明
补间动画原理:只是产生一个动画效果而已,实际坐标不变,

13.应用的反编译

apktools:获取apk资源文件(图片资源,布局资源Android清单文件)  
dex2jar:通过这个工具查看apk源码
jd.exe:可以查看源码
逆向助手

14.属性动画

会改变控件的坐标
public class MainActivity extends Activity {
    private ImageView iv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv = (ImageView) findViewById(R.id.iv);
        // iv.setRotationX(rotationX);
        // iv.setAlpha(alpha);
        // iv.setTranslationX(translationX);
        // iv.setScaleX(scaleX);
    }

    // 旋转
    public void click1(View v) {
        ObjectAnimator ro = ObjectAnimator.ofFloat(iv, "rotationX", 10, 20, 40,
                360);
        ro.setDuration(2500);
        ro.start();
    }

    // 透明
    public void click2(View v) {
        ObjectAnimator al = ObjectAnimator.ofFloat(iv, "alpha", 1f, 0.8f, 0.4f,
                0f);
        al.setDuration(2500);
        al.start();

    }

    // 位移
    public void click3(View v) {
        ObjectAnimator ts = ObjectAnimator.ofFloat(iv, "translationX", 1f,
                0.8f, 0.4f, -10f);
        ts.setDuration(2500);
        ts.start();

    }

    // 缩放
    public void click4(View v) {
        ObjectAnimator sc = ObjectAnimator.ofFloat(iv, "scaleX", 1f, 2f, 5f);
        sc.setDuration(2500);
        sc.start();

    }

    // 综合
    public void click5(View v) {
        AnimatorSet set = new AnimatorSet();
        ObjectAnimator ts = ObjectAnimator.ofFloat(iv, "translationY", 1f, 200f);
        ObjectAnimator sc = ObjectAnimator.ofFloat(iv, "scaleX", 2f, 5f);
        ObjectAnimator ro = ObjectAnimator.ofFloat(iv, "rotationY", 40,
                360,720);

        set.setDuration(5000);
        set.playTogether(ts, sc,ro);
        //set.setTarget(iv);
        set.start();
    }

}
点击复制链接 与好友分享!回本站首页
上一篇:安卓_多媒体 加载大图 画板 撕衣服 动画 音乐盒 视频播放
下一篇:android 二级联动列表,仿eleme点餐页面
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站