Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 安卓_Fragment通信 menu菜單 補間動畫 屬性動畫 通知欄

安卓_Fragment通信 menu菜單 補間動畫 屬性動畫 通知欄

編輯:關於Android編程

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();
    }

}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved