Androidアプリケーション開発の基礎の11:新しい特性

10090 ワード


Fragment

  • 用途:1つのActivityでインタフェースを切り替え、インタフェースを切り替えるときにFragmentの中身だけを切り替える
  • ライフサイクル法はActivityと一致しており、Activity
  • であることが理解できる.
  • Fragmentの表示内容としてレイアウトファイルを定義
    // View Fragment 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        // View , , Fragment 
        View v = inflater.inflate(R.layout.fragment01, null);
        return v;     
    }
    
  • .
  • 指定ビューグループ
    // fragment 
    //new fragment 
    Fragment01 fg = new Fragment01();
    FragmentManager fm = getFragmentManager();
    // 
    FragmentTransaction ft = fm.beginTransaction();
    // fragment id 
    ft.replace(R.id.fl, fg);
    ft.commit();
    
  • にFragmentを表示する.

    ライフサイクル

  • fragment切り替え時に古いfragmentオブジェクトが破棄され、新しいfragmentオブジェクトが
  • 作成する.

    低バージョン対応

  • support-v 4.JArパッケージには関連apiがあります.つまりfragmentは低バージョンのシミュレータで
  • を実行できます.

    アニメーション(Animation)


    フレームアニメーション


    1枚の画像を絶えず切り替えて、アニメーションの効果を形成します
  • drawableディレクトリの下でxmlファイルを定義し、サブノードはanimation-listであり、ここでは表示するピクチャと各ピクチャの表示時間
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
        <item android:drawable="@drawable/g1" android:duration="200" />
        <item android:drawable="@drawable/g2" android:duration="200" />
        <item android:drawable="@drawable/g3" android:duration="200" />
    </animation-list>
    
  • を定義する.
  • フレームアニメーション
    ImageView iv = (ImageView) findViewById(R.id.iv);
    // imageView 
    iv.setBackgroundResource(R.drawable.animations);
    AnimationDrawable ad = (AnimationDrawable) iv.getBackground();
    //         
    ad.start();
    
  • をスクリーン上で再生する.

    補間アニメーション

  • 原形態が新しい形態になったときに変形過程を遷移するために生成されたアニメーションを補間アニメーション
  • と呼ぶ.
  • 変位、回転、スケーリング、透明
  • シフト:
  • パラメータ10はXの始点座標を指すが、画面x座標が10の位置を指すのではなく、imageviewの真のX+10
  • を指す.
  • パラメータ150はXの終点座標を指し、その値はimageviewの真のX+150
    // , 
    TranslateAnimation ta = new TranslateAnimation(10, 150, 20, 140);
    
  • である.
  • x座標の始点位置は、自分に対して0.5 f伝達すると、始点座標が真のX+0.5*iv幅
  • となる.
  • x座標の終点位置は、2が入力と、終点座標が真のX+2*ivの幅
  • となる.
  • y座標の始点位置は、0.5 fが入力と、始点座標が真のY+0.5*iv高さ
  • となる.
  • y座標の終点位置は、2が入力と、終点座標が真のY+2*iv高さ
    TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 2, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 2);
    
  • となる.
  • 動画再生に関する設定
    // 
    ta.setDuration(2000);
    // 
    ta.setRepeatCount(1);
    // 
    ta.setRepeatMode(Animation.REVERSE);
    // , 
    ta.setFillAfter(true);
    // 
    iv.startAnimation(ta);
    
  • ズーム:
  • パラメータ0.1 fは、アニメーションの開始幅が真の幅の0.1倍であることを示す
  • .
  • パラメータ4は、アニメーションの終了幅が実際の幅の4倍であることを示す
  • で拡大縮小する中心点はiv左上角
    ScaleAnimation sa = new ScaleAnimation(0.1f, 4, 0.1f, 4);
    
  • である.
  • パラメータ0.1 fと4の意味は上記と同じ
  • である.
  • ズームの中心点を変更する:入力された2つの0.5 f、タイプはすべて自分に対して、この2つのパラメータはズームの中心点
  • を変更した.
  • 中心点x座標=リアルX+0.5*iv幅
  • 中心点Y座標=真Y+0.5*iv高さScaleAnimation sa=new ScaleAnimation(0.1 f,4,0.1 f,4,Animation.RELATIVETOSELF,0.5 f,Animation.RELATIVETOSELF,0.5 f);

  • 透過性:
  • 0は完全透明、1は完全不透明
    AlphaAnimation aa = new AlphaAnimation(0, 0.5f);
    
  • である.
    回転:
  • ,220アニメーション開始時のivを表す角度
  • 360アニメーション終了時のivの角度を表す
  • デフォルト回転の中心はiv左上角
    RotateAnimation ra = new RotateAnimation(20, 360);
    
  • である.
  • 20360の意味は上と同じ
  • は円心座標を指定し、自分に対して値が0.5に入ると、円心のx座標:真のX+iv幅*0.5
  • 円心のY座標:真のY+iv高さ*0.5
    RotateAnimation ra = new RotateAnimation(20, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    
  • すべてのアニメーションが飛び立つ
        // 
        AnimationSet set = new AnimationSet(false);
        // 
        set.addAnimation(aa);
        set.addAnimation(sa);
        set.addAnimation(ra);
        iv.startAnimation(set);
    

    プロパティーアニメーション

  • 補間アニメーション、ただ1つのアニメーションの効果、コンポーネントは実はまだ元の位置の上で、xyは
  • を変えていません

    シフト:

  • 最初のパラメータtargetアニメーションを表示するコンポーネント
  • を指定
  • 2 2 2番目のパラメータpropertyNameコンポーネントを変更する属性を指定
  • の3番目のパラメータvaluesは可変パラメータであり、属性に付与された新しい値
  • である.
  • は0を入力し、x開始座標を表す:現在のx+0
  • は100に入り、x終点座標を表す:現在のx+100
    // get、set 
    ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "translationX", 0, 100) ;
    
  • ズーム:

  • 第3パラメータ指定スケーリングの割合
  • 0.1は本来の高さの10分の1から
  • である.
  • 2は、本来の高さの2倍に終わる
    ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "scaleY", 0.1f, 2);
    
  • である.

    透過性:

  • 透明度、0は完全透明、1は完全不透明
    ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "alpha", 0.1f, 1);
    
  • 回転

  • rotation指定は時計回りに
  • 回転する.
  • 20は開始角度
  • である.
  • 270は終了角度
    ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "rotation", 20, 270);
    
  • である.
  • プロパティはrotationXが垂直反転
  • であることを指定する.
  • 属性rotationYが水平反転
    ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "rotationY", 20, 180);
    
  • であることを指定する.

    可変パラメータ

  • 第3のパラメータ可変パラメータは、複数のパラメータに伝達することができ、往復変位(回転、スケーリング、透明)
    ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "translationX", 0, 70, 30, 100) ;
    
  • を実現することができる.

    すべてのアニメーションが飛び立つ

        // 
        AnimatorSet set = new AnimatorSet();
        // 
        set.setTarget(bt);
        // 
        //set.playSequentially(oa, oa2, oa3, oa4);
        // 
        set.playTogether(oa, oa2, oa3, oa4);
        set.start();
    

    ダイアログ


    OKキャンセルダイアログ

  • ダイアログボックスビルダーオブジェクトを作成します.ファクトリモード
  • と似ています.
  • AlertDialog.Builder builder = new Builder(this);
    
  • タイトルと本文
  • を設定
  • builder.setTitle(" ");
    builder.setMessage(" , ");
    
  • 確定キャンセルボタン
    builder.setPositiveButton(" ", new OnClickListener() {
    
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            Toast.makeText(MainActivity.this, " , ", 0).show();
        }
    });
    
    builder.setNegativeButton(" ", new OnClickListener() {
    
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            Toast.makeText(MainActivity.this, " , ", 0).show();
        }
    });
    
  • を設定する.
  • ビルダーを使用してダイアログオブジェクト
    AlertDialog ad = builder.create();
    ad.show();
    
  • を作成する.

    ラジオダイアログ

        AlertDialog.Builder builder = new Builder(this);
        builder.setTitle(" ");
    
  • ラジオ・オプションの定義
  • final String[] items = new String[]{
            " ", " ", " "
    };
    //-1 
    // 
    builder.setSingleChoiceItems(items, -1, new OnClickListener() {
    
        //which 
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(MainActivity.this, " " + items[which], 0).show();
            // 
            dialog.dismiss();
        }
    });
    
    builder.show();
    

  • 複数選択ダイアログ

        AlertDialog.Builder builder = new Builder(this);
        builder.setTitle(" ");
    
  • は、複数選択可能なオプションを定義します.複数選択可能なため、
  • が選択されたオプションを記録するためにboolean配列が必要です.
  • final String[] items = new String[]{
            " ",
            " ",
            " ",
            " "
    };
    //true 
    final boolean[] checkedItems = new boolean[]{
            true,
            false,
            false,
            false,
    };
    builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {
    
        // , , isChecked true
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            checkedItems[which] = isChecked;
        }
    });
    
    builder.setPositiveButton(" ", new OnClickListener() {
    
        @Override
        public void onClick(DialogInterface dialog, int which) {
            StringBuffer sb = new StringBuffer();
            for(int i = 0;i < items.length; i++){
                sb.append(checkedItems[i] ? items[i] + " " : "");
            }
            Toast.makeText(MainActivity.this, sb.toString(), 0).show();
        }
    });
    builder.show();
    

  • 進捗バーダイアログ

  • 進捗バーダイアログボックスnew
    final ProgressDialog pd = new ProgressDialog(this);
    
  • プログレスバーのスタイルを設定し、回転でもよいし、水平なプログレスバー
    pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    
  • でもよい.
  • pd.setTitle(" , ...")
    // 
    pd.setMax(200);
    pd.show();
    // 
    Thread t = new Thread(){
        @Override
        public void run() {
            // TODO Auto-generated method stub
            super.run();
            for (int i = 0; i < 200; i++) {
                try {
                    sleep(30);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                // 
                pd.setProgress(i);
            }
            pd.dismiss();
    
        }
    };
    t.start();