Android 台灣中文網
標題:
關於程式呼應與onDraw?
[打印本頁]
作者:
lieak5922512
時間:
2014-6-16 23:29
標題:
關於程式呼應與onDraw?
如題小弟最近遇到了個奇怪的東西= =?
因為沒有人願意幫忙 找過了書也都沒有頭緒
最近寫了抓偷魚貓的小遊戲(回味兒時抓貓)
我是用onDraw寫的 做呼應 定義因該都有做到 找到的錯誤 因該都有對應到 完全不知道錯在哪裡= =
MainactivityView
public class MainActivityView extends View{
DisplayMetrics mDM;
WindowManager mWM;
final int mLineOffset;
final int mMaxDrawStep;
final int mMaxDrawRang;
Paint mPaint;
Bitmap mBitmap;
Bitmap mBitmapResize;
final int mBitmapSize;
boolean mHit =false;
int mMiss =0;
int mMissable =5;
int mCatch =0;
int mReflashTime =100000;
RandomCoordinate mRCThread;
Random mRandom;
int mRandomX;
int mRandomY;
public MainActivityView (Context context){
super(context);
TypedValue tdv =new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.actionBarSize,tdv,true);
mLineOffset =tdv.complexToDimensionPixelSize(tdv.data,context.getResources().getDisplayMetrics());
mDM=new DisplayMetrics();
mWM=(WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
mWM.getDefaultDisplay().getMetrics(mDM);
mMaxDrawStep =mDM.widthPixels/mLineOffset;
mMaxDrawRang =mMaxDrawStep*mLineOffset;
mBitmapSize =2*mLineOffset;
mPaint = new Paint();
mBitmap =((BitmapDrawable)getResources().getDrawable(R.drawable.images123)).getBitmap();
mBitmapResize =Bitmap.createScaledBitmap(mBitmap,mBitmapSize-10, mBitmapSize-10, true);
mRandom = new Random(System.currentTimeMillis());
mRCThread = new RandomCoordinate();
mRCThread .start();
}
public void onDraw(Canvas canvas)
{
canvas.drawColor(Color.LTGRAY);
mPaint.setColor(Color.GRAY);
mPaint.setStrokeWidth(1);
for (int cnt = 0; cnt <= mMaxDrawStep; cnt++)
canvas.drawLine(0,cnt*mLineOffset,mMaxDrawRang,cnt*mLineOffset, mPaint);
for (int cnt = 0; cnt <= mMaxDrawStep; cnt++)
canvas.drawLine(cnt*mLineOffset+mLineOffset, 0,cnt*mLineOffset+mLineOffset, mMaxDrawRang,mPaint);
canvas.drawBitmap(mBitmapResize, mRandomX*mLineOffset,mRandomY*mLineOffset,mPaint);
mPaint.setColor(Color.RED);
mPaint.setStrokeWidth(3);
if(mHit)
canvas.drawLine(mRandomX*mLineOffset, mRandomY*mLineOffset,mRandomX*mLineOffset+mBitmapSize,mRandomY*mLineOffset+mBitmapSize, mPaint);
mPaint.setColor(Color.BLACK);
mPaint.setTextSize(mLineOffset/2);
if(mMiss<mMissable){
canvas.drawText(String.format("失敗次數:%d次", mMiss),mLineOffset,2*mBitmapSize+mMaxDrawRang,mPaint);
canvas.drawText("喵~~(抓到偷魚貓了Ψ(o ∀ o)Ψ!!!)",mLineOffset ,mMaxDrawRang+mBitmapSize , mPaint);
}else if(mMiss>mMissable){
canvas.drawText(String.format("失敗次數:%d次", mMiss,"喵~喵~喵~(偷魚貓跑了T_T)"), mLineOffset,mMaxDrawRang+2*mBitmapSize,mPaint);
}
}
public void myTouchPoint(float x,float y){
if(!mHit){
if((mRandomX*mLineOffset<=x)&&(x<=mRandomY*mLineOffset+mBitmapSize)){
if((mRandomY*mLineOffset+mLineOffset<=y)&&
(y <=mRandomY*mLineOffset+mBitmapSize+mLineOffset)){
mHit =true;
mMiss =0;
}else{mMiss++;}
postInvalidate();
}
}
}
class RandomCoordinate extends Thread {
public void run(){
try{
while(mMiss<mMissable){
mRandomX =(int)(mRandom.nextFloat()*mMaxDrawStep);
mRandomY =(int)(mRandom.nextFloat()*mMaxDrawStep);
if((mRandomX*mLineOffset+mBitmapSize<=mMaxDrawRang)&&(mRandomY*mLineOffset+mBitmapSize<=mMaxDrawRang)){
sleep(mReflashTime);
postInvalidateOnAnimation();
mHit =false;
}
}
}catch (Exception e){}
}
}
}
複製代碼
Mainactivity
package com.example.example;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
public class MainActivity extends Activity {
MainActivityView mView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mView = new MainActivityView(this);
setContentView(mView);
}
public boolean onTouchEvent(MotionEvent event){
if(event.getAction() == MotionEvent.ACTION_DOWN)
mView.myTouchPoint(event.getX(),event.getY());
return super.onTrackballEvent(event);
}
}
複製代碼
這程式碼是建一個MainactivityView得class寫好後 再讓Mainactivity讀到MainactivityView裡去阿 怎麼讀不到呢?
想請求解惑 我束手無策了
歡迎光臨 Android 台灣中文網 (https://apk.tw/)
Powered by Discuz! X3.1