This allows you to make a mosaic by choosing a colour, then clicking in a large grid. It does things in a slightly long-winded way, which I've subsequently refined for other apps (now I know better - slightly - what I'm doing!).
app/manifests/AndroidManifest.xml - to force landscape orientation
app/res/drawable - pictures
There are a number of colour files, called "tessera0", "tessera1", "tessera2" etc. They are referenced in app/java/com.(the project name)/ImageTessera and the number of them (10) is referenced in app/res/layout/activity_main.xml.
app/res/mipmap/ic_launcher.png/ - icon for launching app
app/res/values/strings.xml - strings
MosaictesseraClick on colour, then in grid. Tap again to removenew
app/res/layout/activity_main.xml - screen format
app/java/com.(the project name)/MainActivity - main code for app
package com.edkins.mosaic;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
public class MainActivity extends Activity {
int paint = 1;
int tileMax = 400;
static int [] tile = new int [400];
static MainActivity theMainActivity;
protected void onCreate(Bundle savedInstanceState) {
theMainActivity = this;
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
GridView palette = (GridView) findViewById(R.id.paletteView);
palette.setAdapter(new ImagePalette(this));
palette.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView> parent, View v,
int position, long id) {
processPaletteClick(position);
}
});
GridView mosaic = (GridView) findViewById(R.id.mosaicView);
mosaic.setAdapter(new ImageTessera(this));
mosaic.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView> parent, View v, int position, long id) {
processMosaicClick(v, position);
}
});
}
public void processPaletteClick(int position) {
paint = position;
}
public void processMosaicClick(View v, int position) {
if (tile[position] == paint) {tile[position] = 0;}
else {tile[position] = paint;}
String fileName = getString(R.string.tesseraName);
fileName = fileName + String.format("%01d", tile[position]);
int resrcId = getResources().getIdentifier(fileName, "drawable", getPackageName());
((ImageView) v).setImageResource(resrcId);
}
public void doClear(View view) {
for (int i=0; i
app/java/com.(the project name)/ImagePalette - code for palette gridview. You create this new file by right-clicking on the MainActvity and select New, then Java class
package com.edkins.mosaic;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
public class ImagePalette extends BaseAdapter {
private Context mContext;
public ImagePalette(Context c) {mContext = c;}
public int getCount() {return tessera.length;}
public Object getItem(int position) {return null;}
public long getItemId(int position) {return 0;}
// create new ImageView for palette
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
}
else {
imageView = (ImageView) convertView;
}
// initialise the view element (to one of the colours)
imageView.setImageResource(tessera[position]);
return imageView;
}
// Colours - initialises palette
private Integer[] tessera = {
R.drawable.tesserac, R.drawable.tessera1,
R.drawable.tessera2, R.drawable.tessera3,
R.drawable.tessera4, R.drawable.tessera5,
R.drawable.tessera6, R.drawable.tessera7,
R.drawable.tessera8, R.drawable.tessera9
};
}
app/java/com.(the project name)/ImageTessera - code for tessera gridview - a new file, see above
package com.edkins.mosaic;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class ImageTessera extends BaseAdapter {
private Context mContext;
public ImageTessera(Context c) {mContext = c;}
public int getCount() {return 400;}
public Object getItem(int position) {return null;}
public long getItemId(int position) {return 0;}
// create new ImageView for tessera
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
Context context = parent.getContext();
if (convertView == null) {
imageView = new ImageView(mContext);
RelativeLayout rel = (RelativeLayout) MainActivity.theMainActivity.findViewById(R.id.relLayout);
int w = rel.getWidth() / 16;
imageView.setLayoutParams(new GridView.LayoutParams(w, w));
} else {
imageView = (ImageView) convertView;
}
//set the tile to whatever is in the array (so we can scroll)
String fileName = "tessera" + MainActivity.tile[position];
int id = MainActivity.theMainActivity.getResources().getIdentifier(fileName, "drawable", context.getPackageName());
imageView.setImageResource(id);
return imageView;
}
}
Index to my other websites