Skip to content
Snippets Groups Projects
Commit 0701f73c authored by Maxime Graulich's avatar Maxime Graulich
Browse files

Add Android project

parent a2e508fa
No related branches found
No related tags found
No related merge requests found
package org.geuz.onelab;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class SeparatedListView extends ListView{
private SeparatedListAdaptater adapter;
private Context _context;
public SeparatedListView(Context context) {
super(context);
_context = context;
adapter = new SeparatedListAdaptater();
this.setAdapter(adapter);
}
public SeparatedListView(Context context, View[] footer) {
super(context);
_context = context;
for(View v : footer)
this.addFooterView(v);
adapter = new SeparatedListAdaptater();
this.setAdapter(adapter);
}
public void addItem(String header, View item) {
TextView title = (TextView)((LayoutInflater) _context.getSystemService( Context.LAYOUT_INFLATER_SERVICE )).inflate(R.layout.list_header, null);
title.setText(header);
adapter.addItem(header, title, item);
adapter.notifyDataSetChanged();
this.invalidateViews();
}
public void refresh()
{
adapter.notifyDataSetChanged();
this.invalidateViews();
}
public void clear()
{
adapter.clear();
adapter.notifyDataSetChanged();
}
private class Section{
private String _name;
private List<View> _items;
public Section(String name){
_name = name;
_items = new ArrayList<View>();
}
public void addItem(View v){
_items.add(v);
}
public String getName(){
return _name;
}
public int getItemsCount(){
return _items.size();
}
public View getItem(int pos){
return _items.get(pos);
}
}
private class SeparatedListAdaptater extends BaseAdapter{
List<Section> sections;
List<View> titles;
public SeparatedListAdaptater() {
sections = new ArrayList<SeparatedListView.Section>();
titles = new ArrayList<View>();
}
public void addItem(String header, View title, View item) {
for(Section s : sections){
if(s.getName().equals(header)){
s.addItem(item);
return;
}
}
Section s = new Section(header);
s.addItem(item);
sections.add(s);
titles.add(title);
}
//@Override
public int getCount() {
int count = 0;
for(Section s : sections) count += s.getItemsCount() + 1;
return count;
}
//@Override
public Object getItem(int position) {
// UNUSED Auto-generated method stub
return null;
}
//@Override
public long getItemId(int position) {
// UNUSED Auto-generated method stub
return 0;
}
//@Override
public View getView(int position, View convertView, ViewGroup parent) {
int section = -1,
lastPosition = -1;
while(lastPosition<position){
int itemsCount = sections.get(section+1).getItemsCount();
if(lastPosition+1 == position)// this is a section
return titles.get(section+1);
else if(lastPosition+1+itemsCount >= position){ // the view is in this section
if(section<0) return sections.get(section+1).getItem(position-1);
return sections.get(section+1).getItem(position-lastPosition-2);
}
lastPosition+= 1 + itemsCount;
section++;
}
return null;
}
public void clear()
{
sections.clear();
titles.clear();
}
}
}
package org.geuz.onelab;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.support.v4.view.MotionEventCompat;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
import android.view.GestureDetector.OnDoubleTapListener;
import android.view.GestureDetector.OnGestureListener;
import android.view.ScaleGestureDetector.OnScaleGestureListener;
class mGLSurfaceView extends GLSurfaceView {
private float scaleFactor = 1f;
private GestureDetector gesture;
private ScaleGestureDetector scaleGesture;
private float lastX, lastY;
private GLESRender _renderer;
public mGLSurfaceView(Context context, GLESRender renderer) {
super(context);
_renderer = renderer;
gesture = new GestureDetector(context, new GestureListener(this));
scaleGesture = new ScaleGestureDetector(context, new OnScaleGestureListener() {
public void onScaleEnd(ScaleGestureDetector detector) {}// UNUSED Auto-generated method stub
public boolean onScaleBegin(ScaleGestureDetector detector) {return true;}// UNUSED Auto-generated method stub
public boolean onScale(ScaleGestureDetector detector) {
scaleFactor *= detector.getScaleFactor();
scaleFactor = Math.max(0.1f, Math.min(scaleFactor, 50.0f));
_renderer.scale(scaleFactor, scaleFactor, scaleFactor);
requestRender();
return true;
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getPointerCount() >= 3){
scaleGesture.onTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_CANCEL, 0,0, 0));
final float x = MotionEventCompat.getX(event, 1);
final float y = MotionEventCompat.getY(event, 1);
int action = MotionEventCompat.getActionMasked(event);
if(action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_1_DOWN){
lastX = x;
lastY = y;
}
else if(action == MotionEvent.ACTION_MOVE){
float dx = x - lastX,
dy = y - lastY;
if(dx != 0 || dy != 0)
_renderer.rotate(dy, dx, 0);
requestRender();
lastX = x;
lastY = y;
}
return true;
}
else {
scaleGesture.onTouchEvent(event);
return gesture.onTouchEvent(event);
}
}
private class GestureListener implements OnGestureListener, OnDoubleTapListener{
//private View view;
public GestureListener(View view) {
//this.view = view;
}
public boolean onDown(MotionEvent e) {
// UNUSED Auto-generated method stub
return true;
}
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
// UNUSED Auto-generated method stub
return false;
}
public void onLongPress(MotionEvent e) {
// UNUSED Auto-generated method stub
}
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
_renderer.translate(-distanceX, distanceY, 0f);
requestRender();
return false;
}
public void onShowPress(MotionEvent e) {
// UNUSED Auto-generated method stub
}
public boolean onSingleTapUp(MotionEvent e) {
// UNUSED Auto-generated method stub
return false;
}
public boolean onDoubleTap(MotionEvent e) {
// UNUSED Auto-generated method stub
return false;
}
public boolean onDoubleTapEvent(MotionEvent e) {
_renderer.translate(0f, 0f, 0f);
scaleFactor = 1f;
_renderer.scale(scaleFactor, scaleFactor, scaleFactor);
_renderer.rotate(0, 0, 0);
requestRender();
return false;
}
public boolean onSingleTapConfirmed(MotionEvent e) {
// UNUSED Auto-generated method stub
return false;
}
}
public void resetScale(){
scaleFactor = 1f;
_renderer.scale(scaleFactor, scaleFactor, scaleFactor);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment