Subversion Repositories Projects

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

package org.ligi;

import android.app.Activity;
import android.os.Bundle;

import android.app.Activity;
import android.os.Bundle;

import android.view.View;
import android.widget.TextView;


import android.app.Activity;
import android.content.Context;
import android.graphics.*;
import android.os.Bundle;
import android.os.*;
import android.view.View;

import java.util.Random;

import android.view.Window;
import android.view.WindowManager;
import android.view.KeyEvent;

import android.graphics.Region.Op;

import org.bluez.*;

public class DUBwiseView
    extends View
    implements DUBwiseDefinitions
               

{
    private Paint   mPaint = new Paint();

    public static int LCD_CHAR_COUNT=222;
    // some images we need
    private Bitmap  bg_img,lcd_tiles,lcd_img;

    // pos for scrolling
    private int pos=0;

    String str1="";
    String[] lcd_lines;
    long last_run=0;
    int last_key=0;

    int wi,he;
    //     Activity context;

       
    Activity root;
    int lcd_top;
    int menu_y=0;

    public DUBwiseView(Context context) {
        super(context);
        root=(Activity) context;
        lcd_lines=new String[main_menu_items.length];
        for (int y=0;y<main_menu_items.length;y++)
            lcd_lines[y]=" " + main_menu_items[y];
       
        // needed to get Key Events
        setFocusable(true);
    }

   
    public Bitmap resize_to_screen(Bitmap orig,float x_scale_,float y_scale_)
    {
        // createa matrix for the manipulation
        Matrix matrix = new Matrix();
        float x_scale,y_scale;
        if (y_scale_!=0f)
            y_scale= (getHeight()*y_scale_ )/orig.height();
        else // take x_scale
            y_scale=(getWidth()*x_scale_ )/orig.width();

        if (x_scale_!=0f)
            x_scale= (getWidth()*x_scale_ )/orig.width();
        else
            x_scale= (getHeight()*y_scale_ )/orig.height();

        matrix.postScale(x_scale , y_scale);
        return Bitmap.createBitmap(orig, 0, 0,(int)( orig.width()),(int)( orig.height()), matrix, true);
    }


    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        switch ( keyCode)
            {
            case KeyEvent.KEYCODE_DPAD_DOWN :
                menu_y++;
                break;
       
            case KeyEvent.KEYCODE_DPAD_UP :
                menu_y--;
                break;

            case KeyEvent.KEYCODE_DPAD_CENTER :
                root.finish();
                break;
            }

        last_key=keyCode;
        calc_lcd();
        invalidate();
        return true;
    }

    @Override protected void onSizeChanged(int w, int h, int oldw, int oldh)
    {
       
        bg_img = resize_to_screen(BitmapFactory.decodeResource(getResources(), R.drawable.starfield),0f,1f);
        lcd_tiles = resize_to_screen(BitmapFactory.decodeResource(getResources(), R.drawable.lcd_green),0.05f*LCD_CHAR_COUNT,0f);
        calc_lcd();
    }

    public void calc_lcd()
    {
        lcd_top=getHeight()-lcd_lines.length*lcd_tiles.height();
        Paint paint = mPaint;
        lcd_img= Bitmap.createBitmap(getWidth(),lcd_lines.length*lcd_tiles.height()+100,false);
        Canvas lcd_canvas=new Canvas();

        lcd_canvas.setDevice(lcd_img);
        lcd_canvas.drawColor(Color.WHITE);
        int char_width=(int)(lcd_tiles.width()/LCD_CHAR_COUNT);
        for ( int lcd_line=0 ; lcd_line < lcd_lines.length ; lcd_line++)
            for (int char_pos=0;char_pos<20;char_pos++)
                {
                    int act_char=0;
                   
                    if (char_pos<lcd_lines[lcd_line].length())
                        act_char=lcd_lines[lcd_line].charAt(char_pos)-32;
                   
                    if ((menu_y==lcd_line)&& (char_pos==0))
                        act_char=30;
                   
                    lcd_canvas.clipRect(new RectF(char_pos*char_width,lcd_tiles.height()*lcd_line,(char_pos+1)*char_width,lcd_tiles.height()*(lcd_line+1)),Op.REPLACE );
                             
                    lcd_canvas.drawBitmap(lcd_tiles,(char_pos-act_char)*(char_width),lcd_tiles.height()*(lcd_line) , paint);
                                                                     

                }
    }
     
    public void tick()
    {
        pos--;
        pos%=bg_img.getWidth();
        //SystemClock.sleep(50);
    }


    @Override protected void onDraw(Canvas canvas) {
        tick();

        Paint paint = mPaint;
        paint.setAntiAlias(true);

       
        canvas.drawBitmap(bg_img,pos,0 , paint);

        if ((bg_img.width()+pos)<(getWidth()))
            canvas.drawBitmap(bg_img,pos+bg_img.width(),0 , paint);

        canvas.drawBitmap(lcd_img,0,lcd_top , paint);
               
        paint.setColor(Color.GREEN);
        canvas.drawText("LastKeyCode:"+last_key,10,10,paint);

        invalidate();
    }
}