Drag and Drop inside a grid
You choose an feature (such as colour or number of turns or style), then choose the option within it. The Greek Key appears.
app/res/drawable - pictures
Various pictures, which the code will load into an array for manipulation.
app/res/values/strings.xml - strings
Photo Gallery
Just to prove the grid doesn\'t have to be at the top of the screen
app/res/layout/activity_main.xml - screen format
app/java/com.(the project name)/MainActivity - main code for app
package com.edkins.photogallery;
import android.support.v4.view.MotionEventCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.GridView;
public class MainActivity extends AppCompatActivity
implements View.OnTouchListener {
public static int[] photo = {
R.drawable.lion1, R.drawable.lion2, R.drawable.lion3, R.drawable.lion4,
R.drawable.virgin1, R.drawable.virgin2, R.drawable.virgin3,
R.drawable.virgin4, R.drawable.virgin5, R.drawable.virgin6,
};
public static int [] newOrder = new int [photo.length];
public static int [] xy = new int [2];
public static int cols=5;
public static int width;
public static int fromSub=-1;
public static int toSub=-1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView gridV = (GridView) findViewById(R.id.gridView);
gridV.setNumColumns(cols);
gridV.setAdapter(new ImageGrid(this));
gridV.setOnTouchListener(this);
if (newOrder[0]==0) {System.arraycopy(photo, 0, newOrder,0, photo.length);}
}
public boolean onTouchEvent(MotionEvent ev) {
final int action = MotionEventCompat.getActionMasked(ev);
if (action==MotionEvent.ACTION_DOWN) {
final float x = ev.getRawX();
final float y = ev.getRawY();
fromSub = findSub(x, y);
}
else if (action==MotionEvent.ACTION_MOVE) {
final float x = ev.getRawX();
final float y = ev.getRawY();
toSub = findSub (x,y);
if (toSub!=-1 && fromSub!=-1)
if (toSub!=fromSub) {
int save = newOrder [fromSub];
if (fromSub < toSub) {
System.arraycopy(newOrder, fromSub+1, newOrder,fromSub, toSub-fromSub);
}
else {
System.arraycopy(newOrder, fromSub-1, newOrder,fromSub, fromSub-toSub);
}
newOrder[toSub] = save;
GridView gridV = (GridView) findViewById(R.id.gridView);
gridV.setAdapter(new ImageGrid(this));
fromSub=toSub;
}
}
return true;
}
public boolean onTouch(View v, MotionEvent event) {
onTouchEvent(event);
return true;
}
public int findSub (float x, float y) {
GridView gridV = (GridView) findViewById(R.id.gridView);
gridV.getLocationInWindow(xy);
int x2 = (int) (x-xy[0]); int y2 = (int) (y-xy[1]);
x2 = x2 / width; y2 = y2 / width;
int sub = y2 * cols + x2;
if (sub<0 || sub>=newOrder.length) {sub=-1;}
return sub;
}
}
app/java/com.(the project name)/ImageGrid - code for gridview. You create this new file by right-clicking on the MainActvity and select New, then Java class
package com.edkins.photogallery;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
public class ImageGrid extends BaseAdapter {
private AppCompatActivity mContext;
public ImageGrid(AppCompatActivity c) {mContext = c;}
public int getCount() {return MainActivity.newOrder.length;}
public Object getItem(int position) {return null;}
public long getItemId(int position) {return 0;}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
GridView grid = (GridView) mContext.findViewById(R.id.gridView);
MainActivity.width = grid.getWidth() / MainActivity.cols;
imageView.setLayoutParams(new GridView.LayoutParams(MainActivity.width, MainActivity.width));
}
else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(MainActivity.newOrder[position]);
return imageView;
}
}
Index to my other websites
© Jo Edkins 2016