Fragment 基礎

package com.advanced_android.fragmenttransactionsample;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    private static final String FRAGMENT_TAG = "FRAGMENT_TAG";
    private static final String KEY_NUMBER = "KEY_NUMBER";
    private int mNumber = 0;
    private FragmentManager.OnBackStackChangedListener mListener = new FragmentManager.OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            FragmentManager fragmentManager = getSupportFragmentManager();
            int count = 0;
            for (Fragment f : fragmentManager.getFragments()) {
                if (f != null) {
                    count++;
                }
            }
            mNumber = count;
            Log.d("MainActivity", "onBackStackChanged mNumber=" + mNumber);
        }
    };

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

        findViewById(R.id.add_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager fragmentManager = getSupportFragmentManager();
                fragmentManager.beginTransaction()
                    .add(R.id.fragment_container, MyFragment.getInstance(mNumber))
                    .addToBackStack(null)
                    .commit();
            }
        });
        findViewById(R.id.remove_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mNumber == 0) {
                    return;
                }
                FragmentManager fragmentManager = getSupportFragmentManager();
                fragmentManager.popBackStack();
            }
        });

        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.addOnBackStackChangedListener(mListener);
        Fragment fragment = fragmentManager.findFragmentByTag(FRAGMENT_TAG);
        Log.d("MainActivity", "onCreate fragment=" + fragment + ", mNumber=" + mNumber);
        if (savedInstanceState == null) {
            fragmentManager.beginTransaction()
                .add(R.id.fragment_container, MyFragment.getInstance(mNumber), FRAGMENT_TAG)
                .addToBackStack(null)
                .commit();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.removeOnBackStackChangedListener(mListener);
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(KEY_NUMBER, mNumber);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        mNumber = savedInstanceState.getInt(KEY_NUMBER);
    }
}
package com.advanced_android.fragmenttransactionsample;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;


public class MyFragment extends Fragment {

    private static final String ARG_NO = "ARG_NO";

    public MyFragment() {
    }

    public static MyFragment getInstance(int no) {
        MyFragment fragment = new MyFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_NO, no);
        fragment.setArguments(args);
        return fragment;
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_my, container, false);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        int no = getArguments().getInt(ARG_NO, 0);
        String text = "" + no + "番目のFragment";
        Log.d("MyFragment", "onCreate " + text);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        TextView textView = (TextView) view.findViewById(R.id.text);
        int no = getArguments().getInt(ARG_NO, 0);
        String text = "" + no + "番目のFragment";
        Log.d("MyFragment", "onViewCreated " + text);
        textView.setText(text);
    }
}

CircleIndicator を ViewPager の最下部に置く

github.com

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.makaroni.circleviewpagertest.MainActivity"
    >

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

    <me.relex.circleindicator.CircleIndicator
        android:id="@+id/indicator"
        android:layout_width="match_parent"
        android:layout_alignBottom="@+id/viewpager"
        android:layout_height="50sp"
        android:layout_marginBottom="50sp"
        app:ci_drawable="@drawable/circle"
        app:ci_height="10sp"
        app:ci_width="10sp"
        />

</RelativeLayout>

Unity Button OnClick処理

例はボタンを押したら残機を増やす処理

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class IncrementZankiController : MonoBehaviour {

    public Text text;
    public Image heart1;
    public Image heart2;
    public Image heart3;

    public void IncrementLife(){
        Sprite image = Resources.Load<Sprite> ("heart_full");
        int life = int.Parse (text.text);
        if (life == 0) {
            heart1.sprite = image;
            life++;
        } else if (life == 1) {
            heart2.sprite = image;
            life++;
        } else if (life == 2) {
            heart3.sprite = image;
            life++;
        }
        text.text = life.ToString ();
    }
}

ダイアログにEditView表示して、内容をクリップボードにコピー

@OnClick(R.id.btn)
    void buttonOnClick(View v) {
        //テキスト入力を受け付けるビューを作成します。
        final EditText editView = new EditText(MainActivity.this);
        editView.setText("hogehoge");
        new AlertDialog.Builder(MainActivity.this)
            .setIcon(android.R.drawable.ic_dialog_info)
            .setTitle("タイトル")
            .setView(editView)
            .setPositiveButton("コピー", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    CopyClipBoard(editView.getText().toString());
                }
            })
            .setNegativeButton("キャンセル", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                }
            })
            .show();
    }

    public void CopyClipBoard(String text) {
        SetClipData(text);
    }

    private void SetClipData(String allText) {
        try {
            ClipData.Item item = new ClipData.Item(allText);

            String[] mimeType = new String[1];
            mimeType[0] = ClipDescription.MIMETYPE_TEXT_URILIST;

            ClipData cd = new ClipData(new ClipDescription("text_data", mimeType), item);

            ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
            cm.setPrimaryClip(cd);
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }

Android リストビュー

public class MainActivity extends AppCompatActivity {

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

        ListView myListView = (ListView) findViewById(R.id.myListView);

        ArrayList<User> users = new ArrayList<>();

        int[] icons = {
            R.mipmap.ic_launcher,
            R.mipmap.ic_launcher,
            R.mipmap.ic_launcher,
        };

        String[] names = {
            "maroni1",
            "maroni2",
            "maroni3",
        };

        String[] locs = {
            "US",
            "UK",
            "JP",
        };

        for (int i = 0; i < icons.length; i++) {
            User user = new User();
            user.setIcon(BitmapFactory.decodeResource(
                getResources(),
                icons[i]
            ));
            user.setName(names[i]);
            user.setLocation(locs[i]);
            users.add(user);
        }

        UserAdapter adapter = new UserAdapter(this, 0, users);


//        for (int i = 0; i < 30; i++) {
//            items.add("item-" + i);
//        }
//
//        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
//            this,
//            R.layout.list_item,
//            items
//        );
//
        myListView.setEmptyView(findViewById(R.id.emptyView));
        myListView.setAdapter(adapter);

        myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(
                AdapterView<?> parent,
                View view,
                int position,
                long id
            ) {
                TextView name = (TextView)view.findViewById(R.id.name);
                Toast.makeText(
                    MainActivity.this,
                    Integer.toString(position) + ":" + name.getText().toString(),
                    Toast.LENGTH_SHORT
                ).show();
            }
        });
    }

    public class UserAdapter extends ArrayAdapter<User> {
        private LayoutInflater layoutInflater;

        public UserAdapter(Context context, int resource, ArrayList<User> users) {
            super(context, resource, users);
            this.layoutInflater = (LayoutInflater) context.getSystemService(
                Context.LAYOUT_INFLATER_SERVICE
            );
        }

        @NonNull
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;

            if (convertView == null) {
                convertView = layoutInflater.inflate(
                    R.layout.list_item,
                    parent,
                    false
                );
                holder = new ViewHolder();
                holder.icon = (ImageView) convertView.findViewById(R.id.icon);
                holder.name = (TextView) convertView.findViewById(R.id.name);
                holder.location = (TextView) convertView.findViewById(R.id.loc);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            User user = (User) getItem(position);

            holder.icon.setImageBitmap(user.getIcon());
            holder.name.setText(user.getName());
            holder.location.setText(user.getLocation());

            return convertView;
        }
    }

    static class ViewHolder {
        ImageView icon;
        TextView name;
        TextView location;
    }

    public class User {
        private Bitmap icon;
        private String name;
        private String location;

        public Bitmap getIcon() {
            return icon;
        }

        public void setIcon(Bitmap icon) {
            this.icon = icon;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getLocation() {
            return location;
        }

        public void setLocation(String location) {
            this.location = location;
        }
    }
}

Keras で ORの学習

import numpy as np
import keras
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense

model = Sequential()
model.add(Dense(input_dim=2, activation='relu', units=1))

model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy'])

# データセット
x_train = [
    [0, 0],
    [0, 1],
    [1, 0],
    [1, 1],
]
# 正解ラベル
y_train = [[0],[1],[1],[1]]

model.fit(x_train, y_train, nb_epoch=10, batch_size=1)
score = model.evaluate(x_train, y_train, verbose=0)
print("test-accuracy: {}".format(score[1]))

シンプルなmnist (python3.5 chainer)

import chainer
import chainer.functions as F
import chainer.links as L
from chainer import training
from chainer.training import extensions

class MnistModel(chainer.Chain):
    def __init__(self, out_units):
        super(MnistModel,self).__init__(
                l1 = L.Linear(None, 100),
                l2 = L.Linear(None, 100),
                l3 = L.Linear(None, out_units))

    def __call__(self,x):
         h = F.relu(self.l1(x))
         h = F.relu(self.l2(h))
         return self.l3(h)


model = L.Classifier(MnistModel(out_units=10))
optimizer = chainer.optimizers.Adam()
optimizer.setup(model)

train, test = chainer.datasets.get_mnist()
train_iter = chainer.iterators.SerialIterator(train, 100)
test_iter = chainer.iterators.SerialIterator(test, 100,repeat=False, shuffle=False)

updater = training.StandardUpdater(train_iter, optimizer, device=-1)
trainer = training.Trainer(updater, (100, 'epoch'), out="result")
trainer.extend(extensions.Evaluator(test_iter, model, device=-1))
trainer.extend(extensions.LogReport())
trainer.extend(extensions.PrintReport(['epoch', 'main/loss', 'validation/main/loss', 'main/accuracy', 'validation/main/accuracy']))
trainer.extend(extensions.ProgressBar())
if extensions.PlotReport.available():
    trainer.extend(
        extensions.PlotReport(['main/loss', 'validation/main/loss'], 'epoch', file_name='loss.png'))
    trainer.extend(
        extensions.PlotReport(
            ['main/accuracy', 'validation/main/accuracy'], 'epoch', file_name='accuracy.png'))
    
trainer.run()