1

スクロールと正しい場所でのタッチ信号のピックアップの両方で、多くの問題が発生しています。

基本的にアプリケーションは次のとおりです。

ViewPager ->
Fragment ->
ScrollView -> 
LinearLayout -> 
Lots of dynamically added customer View objects

フラグメント xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/transaction_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<Button
    android:id="@+id/add_new_transaction"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/AddNewTransaction" />

<com.company.application.TransactionScroller
    android:id="@+id/transaction_scroller"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:fillViewport="true" >

    <com.company.application.TransactionGroup
        android:id="@+id/transaction_list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="fill"
        android:orientation="vertical" >

    </com.company.application.TransactionGroup>

</com.company.application.TransactionScroller>
</LinearLayout>

TransactionScroller が ScrollView である場合、TransactionGroup は LinearLayout です。ビュー オブジェクトはカスタム描画され、次のことを行います。

@Override
protected void onMeasure( int widthMeasureSpec, int heightMeasureSpec )
{
    // Try for a width based on our minimum
    setMeasuredDimension( width, height ) ;
}

@Override
public boolean onTouchEvent( MotionEvent event )
{
   Toast.makeText( getContext(), "Grid", Toast.LENGTH_SHORT ).show() ;

   return true ;
}

public void draw( Canvas canvas )
{
   if( tmpBmp.isRecycled() || 
       tmpBmp.getWidth()!=canvas.getWidth() ||
       tmpBmp.getHeight()!=canvas.getHeight() )
    {
        tmpBmp.recycle();
        tmpBmp = Bitmap.createBitmap( canvas.getWidth(), canvas.getHeight(), 
                                      Config.ARGB_8888 ) ;
        c.setBitmap( tmpBmp ) ;
    }

    //clear previous drawings
    c.drawColor( Color.TRANSPARENT, Mode.CLEAR ) ;

    // Draw the background
    c.drawRect( spacing, top, width - spacing , bottom, newpaint ) ;

    // Draw the lines
   for( Line line : lineList )
   {  
      c.drawLine( line.x1, line.y1, line.x2, line.y2, paint ) ;
   }

   canvas.drawBitmap( tmpBmp, 0, 0, null ) ;

   canvas.drawText( String.valueOf( amount ), left, top + ( bottom - top ) /2 , paint);

   canvas.drawBitmap( 
      ( ( BitmapDrawable )MainActivity.iconList[ index ].getDrawable() ).getBitmap(),
      left + MainActivity.iconList[ index ].getWidth(),
      top + ( bottom - top ) /2, paint ) ;
}

1) まず、カスタム ビュー オブジェクトでタッチおよびドラッグ イベントをキャプチャしようとしています。ただし、ScrollView のイベントのみをキャプチャでき、LinearLayout の Down イベントのみをキャプチャでき、カスタム ビューでは何もキャプチャできませんでした。

ScrollView で:

setOnTouchListener( new OnTouchListener()
                       {   
                          @Override
                          public boolean onTouch( View view, MotionEvent event )
                          {
                             // Only called when touched outside the ScrollView

                             if( event.getAction() ==
                                 android.view.MotionEvent.ACTION_DOWN )
                             {
                                Toast.makeText( getContext(),
                                                "S_Down",
                                                Toast.LENGTH_SHORT ).show() ;

                                return false ;
                             }
                             else if( event.getAction() ==
                                      android.view.MotionEvent.ACTION_UP )
                             {
                                Toast.makeText( getContext(),
                                                "S_Up",
                                                Toast.LENGTH_SHORT ).show() ;

                                return false ;
                             }

                             return false;
                          }
                       } ) ;

どちらも ScrollView で呼び出されます。ただし、LinearLayout でも同じで、Down イベントのみがキャプチャされ、カスタム ビューでは何もキャプチャされません。フォーカス可能、クリック可能などを設定してみました。

何か案は?

2) 次に、ScrollView にカスタム View オブジェクトしかない場合、スクロールしません。ただし、ボタンなどの何かで満たされている場合はそうです。上記のように、私は onMeasure() を使用しており、これらの値をハードコーディングしようとしましたが、役に立ちませんでした。

前もって感謝します。ジャック

4

0 に答える 0