【Java开源代码栏目提醒】:网学会员为广大网友收集整理了,TouchButtonFile.java,希望对大家有所帮助!
package org.chapter19;
import java.io.ByteArrayInputStream;
import org.chapter19.Media;
import com.Chapter13.RD.*;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.SweepGradient;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
enum ActionType {
R, L, D, U, RL, LR, DU, UD
}
public class TouchButtonFile extends Button {
static RD_Parser parser = null;
String sParse = "", alphabet = "9012345678";
float x, y;
int iComposed = 0, state, count=0, checkclick=1, Buttonchange=0;
int nowButtonX=-1, nowButtonY=-1, nextButtonX=-1, nextButtonY=-1;
int nowSiteX=-1, nowSiteY=-1, nextSiteX=-1, nextSiteY=-1;
int deltaRow = 0, deltaCol = 0;
String edgeFSM = "", FSM = "";
int colWidth, rowHeight, xStart, yStart;
Paint mPaint, mPaintShader;
public boolean bShown = true;
Context context;
Handler mHandler = new Handler();
public Point[][] pts;
int[] rcs = { 80, 80, 82, 84 }; // 半径
int[] sws = { 80, 2, 4, 2 }; // 笔粗
int[] clrs = { Color.LTGRAY, Color.GRAY, Color.LTGRAY, Color.WHITE };
private Shader mShader;
RectF oval;
Drawable[] dr;
Point[] pts4;
Drawable dt, dr0, dr1, dr2, dr3;
public int width, height, row, col;
boolean[][] XYSelected;
int XYCounter = 0, iCounterClockWise1 = -1, iCounterClockWise2 = -1;
public TouchButtonFile(Context context) {
super(context);
}
public TouchButtonFile(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TouchButtonFile(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setRect(Context context, int row, int col, int width, int height) {
this.context = context;
this.width = width;
this.height = height;
this.row =row;
this.col=col;
colWidth = width / col;
rowHeight = height / row;
pts = new Point[row][col];
pts4 = new Point[row*col];
XYSelected = new boolean[row][col];
for(int i=0; i<row; i++) {
for(int j=0; j<col; j++) {
pts[i][j] = new Point();
pts[i][j].x = j*colWidth + colWidth/2;
pts[i][j].y = i*rowHeight + rowHeight/2;
XYSelected[i][j] = false;
pts4[j+col*i] = pts[i][j];
}
}
oval = new RectF(width/2-rcs[2], height/2-rcs[2], width/2+rcs[2], height/2+rcs[2]);
dr = new Drawable[row*col];
dr0 = context.getResources().getDrawable(R.drawable.play);
dr1 = context.getResources().getDrawable(R.drawable.incvol);
dr2 = context.getResources().getDrawable(R.drawable.eject);
dr3 = context.getResources().getDrawable(R.drawable.decvol);
dr0.setBounds( 80, 80, 80+20, 80+20);//80+dr0.getIntrinsicWidth()/2, 80+dr0.getIntrinsicHeight()/2);
dr1.setBounds(160-20, 80, 160-20+20, 80+20);
dr2.setBounds( 80, 160-20, 80+20, 160-20+20);//80+dr2.getIntrinsicWidth()/2, 160-20+dr2.getIntrinsicHeight()/2);
dr3.setBounds(160-20, 160-10, 160-20+20, 160-10+ 3);
mShader = new SweepGradient(width/2, height/2, new int[] { Color.WHITE, Color.LTGRAY,
Color.WHITE, Color.LTGRAY, Color.WHITE, Color.LTGRAY, Color.WHITE }, null);
mPaintShader = new Paint();
mPaintShader.setShader(mShader);
}
private void drawConcentricCircles(Canvas canvas, int xc, int yc, int[] rcs, int[] sws, int[] clrs) {
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
mPaintShader.setAlpha(0x80);
canvas.drawCircle(xc, yc, rcs[0], mPaintShader);
for(int i=1;i <rcs.length; i++) {
paint.setStrokeWidth(sws[i]);
paint.setColor(clrs[i]);
if(i==2) paint.setAlpha(0x80);
else paint.setAlpha(0xFF);
canvas.drawCircle(xc, yc, rcs[i], paint);
}
}
@Override
protected void onDraw(Canvas canvas) {
if(bShown) {
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(4);
drawConcentricCircles(canvas, width/2, height/2, rcs, sws, clrs);
dr0.draw(canvas);
dr1.draw(canvas);
dr2.draw(canvas);
dr3.draw(canvas);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
paint.setAlpha(0x20);
paint.setStrokeWidth(1);
paint.s