2012-01-28 29 views
6

AndroidでHTML/JSのゲームを少し作っています。 HTC Desire(Android 2.2)の問題に遭遇しています。画面にタッチすると、すべての画像がピクセル化され、タッチが終了するとピクセル化されません。画面に触れているときに、それは右で画面がタッチされると画像が細くなる

enter image description here

:ここ

はスクリーンショットです。誰かがこの問題の原因を突き止めるのを助けることができますか?

注:

  • 問題なしアニメーション中の画面が
  • に触れていない場合、私は私のLG 540アンドロイド2.1
  • にこの問題を持っていない、イメージがの制限数を取得するようですそれは私が私の知る限り、「ピクセル化」行動はOPTIであること、言うことができるようにPhoneGapの
+0

グラフィックスカードのため、あなたのLG携帯電話にはおそらく3Dアクセラレーションはありませんが、Desireにはローエンドのものがあります。あなたは本当にそれを助けることができませんAFAIK –

+0

私の更新された回答は以下の助けになりましたか? – Matt

答えて

2

を使用してい

  • を触れています色スクロール用に作られたマイニング(Froyo以上)レンダリングが簡略化されている場合、Flingスクロールアニメーションの処理が少なくて済みます。

    フルブラウザの機能が必要な場合は、私が多くのことを助けることができないと思います。

    ゲームを作っていると言われているので、回避策があるかもしれません。私はあなたのゲームがスクロール(フルスクリーン)を必要としないことを望んでいるので、スクロールの最適化は必要ありません。

    私はWebViewで簡単なテストを行いました。あなたが言及したように、タップすると、レンダリングは単純化され、物事は少し見えます。その後、何かがクリックされると(WebViewはそれ以上スクロールが行われていないことを知っています)、物事は正常に戻ります。

    WebViewをFrameLayoutに置き換えてレイアウトを変更しました。 FrameLayoutには、WebViewと不可視のボタン(上に)があります。このボタンはすべてのタッチイベントを取得します。次に、WebViewが必要とするイベントの種類を選択してWebViewに渡します。タッチダウンとタッチアップが近接して起こっても、動きがなくても、スクロールする理由はないので、私はそのようなピクセル化された動作を見ていません。

    この例では最もシンプルだったので、「MotionEvent.ACTION_UP」イベントを検出するように選択しました。完了したら、実際のクリックをシミュレートするように、最初に送信します。あなたは確かにACTION_DOWNでトリガーすることができますが、ユーザーがスワイプなどをすると、そのうちの1つ以上が表示されます。適切にカスタマイズしたり、十分な作業をしたり、場合によってはスクロールを有効にすることもできます。以下のコードが私の考えていることを中継するのに十分であることを願っています。

    WebView wv = new WebView(this); 
    View dummyView = new Button(this); 
    dummyView.setBackgroundColor(0x00000000); 
    dummyView.setOnTouchListener(new OnTouchListener() { 
        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
         if (event.getAction() == MotionEvent.ACTION_UP) { 
          MotionEvent down = MotionEvent.obtain(100, 100, 
           MotionEvent.ACTION_DOWN, event.getX(), 
           event.getY(), 0); 
          wv.onTouchEvent(down); 
          wv.onTouchEvent(event); 
         } 
         return false; 
        } 
    }); 
    FrameLayout fl = new FrameLayout(this); 
    fl.addView(wv); 
    fl.addView(dummyView); 
    topLayout.addView(fl); 
    

    EDIT: あなたはPhoneGapのソースを編集したくない場合は、PhoneGapのレイアウトを変更するには、次のような何かを行うことができるかもしれない...それはテストされていないのですが、それは動作するはずのように思える:

    @Override 
    public void onCreate(Bundle arg0) { 
        super.onCreate(arg0); 
        super.loadUrl("file:///android_asset/www/index.html"); 
        // Get the "root" view from PhoneGap 
        LinearLayout droidGapRoot = super.root; 
        // Create a new "root" that we can use. 
        final LinearLayout newRoot = new LinearLayout(this); 
        for (int i = 0; i < droidGapRoot.getChildCount(); i++) { 
         // Move all views from phoneGap's LinearLayout to ours. 
         View moveMe = droidGapRoot.getChildAt(i); 
         droidGapRoot.removeView(moveMe); 
         newRoot.addView(moveMe); 
        } 
        // Create an invisible button to overlay all other views, and pass 
        // clicks through. 
        View dummyView = new Button(this); 
        dummyView.setBackgroundColor(0x00000000); 
        dummyView.setOnTouchListener(new OnTouchListener() { 
         @Override 
         public boolean onTouch(View v, MotionEvent event) { 
          // Only pass "UP" events to the specific view we care about, but 
          // be sure to simulate a valid "DOWN" press first, so that the 
          // click makes sense. 
          if (event.getAction() == MotionEvent.ACTION_UP) { 
           MotionEvent down = MotionEvent.obtain(100, 100, 
             MotionEvent.ACTION_DOWN, event.getX(), 
             event.getY(), 0); 
           newRoot.onTouchEvent(down); 
           newRoot.onTouchEvent(event); 
          } 
          return false; 
         } 
        }); 
        // Layer the views properly 
        FrameLayout frameLayout = new FrameLayout(this); 
        frameLayout.addView(newRoot); 
        frameLayout.addView(dummyView); 
        // Add our new customized layout back to the PhoneGap "root" view. 
        droidGapRoot.addView(frameLayout); 
    } 
    
  • +0

    あなたの記事のおかげで、私はPhonegapを使っていて、私のアプリは99%がJavascriptでビルドされていると言いましたが、App.javaというJavaクラスが1つしかありません。http://phonegap.com/start #android 私は何とかあなたのコードを統合できれば、あなたのソリューションはうまくいくと思いますか? – adrien54

    +0

    上記の追加の例が役立つことを願っています。 – Matt

    +0

    私はそれを試してみましたが、欠落しているクラスをインポートした後、私はアプリを実行しますが、画面は黒で、警告や情報はありません。とにかく助けてくれるThx。 – adrien54

    0

    私は同じ問題を抱えています。あなたが試みることができる1つのことは、タグ内のアプリのマニフェストにandroid:hardwareAccelerated = "true"を追加することです。これは私の問題を止めましたが、今ではアプリ全体がデバイス上に全体的にピクセル化されているように見えるので、これは最善の解決策ではないかもしれません。

    0

    画像のサイズがCSSでピクセル単位でピクセル単位で同じであるかどうかを2回確認します。それは何らかの形で関係しているようです。大きな画像を取得し、デバイス依存の生成されたCSSでそれを再スケーリングすると、問題が発生します。それ以外の場合は表示されないか、表示されません。元の問題が最新のAndroidで修正されているかどうかはわかりませんが、まだ2.3をサポートしています。

    関連する問題