Domanda

hey folks, questo è il mio primo post così facile su di me!

Voglio sviluppare un'applicazione in cui è possibile navigare attraverso 7 schermi come puoi che puoi sulla schermata iniziale.

Ho visto alcuni post su questo, ma non riesco a farli funzionare, non riesco a aggiungere commenti a loro (sono sicuro che io sia un noob)

Quindi ho bisogno di un progetto di lavoro, quindi posso guardarlo e se non dissiccarlo e usare i bit pertinenti per me.

Questo è stato di interesse ma non riesco a farlo funzionare. Io uso Eclipse e l'SDK è che ciò che tutti gli altri usano?

Sviluppare una schermata homescreen Android

Quando lo implemendo devo dire all'app come iniziare perché lo installa ma dice che non c'è attività.

Spero che tu possa aiutare

T

Cosa ho nel mio main.java

package com.matthieu.launcher;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ViewFlipper;

public class main extends Activity {

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      Button onebutton = (Button)findViewById(R.id.soundsone);
      onebutton.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
            Intent i = new Intent(main.this, series1button.class);
            startActivity(i);
            overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out);
         }
      });

      Button twobutton = (Button)findViewById(R.id.soundstwo);
      twobutton.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
            Intent i = new Intent(main.this, series2button.class);
            startActivity(i);
            overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out);
         }
      });

      Button threebutton = (Button)findViewById(R.id.soundsthree);
      threebutton.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
            Intent i = new Intent(main.this, series3button.class);
            startActivity(i);
            overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out);           
         }
      });

      Button fourbutton = (Button)findViewById(R.id.soundsfour);
      fourbutton.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
            Intent i = new Intent(main.this, series4button.class);
            startActivity(i);
            overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out);
         }
      });

      Button fivebutton = (Button)findViewById(R.id.soundsfive);
      fivebutton.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
            Intent i = new Intent(main.this, series5button.class);
            startActivity(i);
            overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out);
         }
      });

      Button sixbutton = (Button)findViewById(R.id.soundssix);
      sixbutton.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
            Intent i = new Intent(main.this, series6button.class);
            startActivity(i);
            overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out);
         }
      });

      Button sevenbutton = (Button)findViewById(R.id.soundsseven);
      sevenbutton.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
            Intent i = new Intent(main.this, series7button.class);
            startActivity(i);
            overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out);           
         }
      });

      Button eightbutton = (Button)findViewById(R.id.soundseight);
      eightbutton.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
            Intent i = new Intent(main.this, series8button.class);
            startActivity(i);
            overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out);           
         }
      });
   }
}
.

quindi dragablespace.java

package com.matthieu.launcher;

import android.content.Context;
import android.app.Activity;
import android.util.Log;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewConfiguration;
import android.widget.Scroller;

public class DragableSpace extends ViewGroup {

   private Scroller mScroller;
   private VelocityTracker mVelocityTracker;

   private int mScrollX = 0;
   private int mCurrentScreen = 0;

   private float mLastMotionX;

   private static final String LOG_TAG = "DragableSpace";

   private static final int SNAP_VELOCITY = 1000;

   private final static int TOUCH_STATE_REST = 0;
   private final static int TOUCH_STATE_SCROLLING = 1;

   private int mTouchState = TOUCH_STATE_REST;

   private int mTouchSlop = 0;

   public DragableSpace(Context context) {

      super(context);
      mScroller = new Scroller(context);

      mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();

      this.setLayoutParams(new ViewGroup.LayoutParams(
                                   ViewGroup.LayoutParams.WRAP_CONTENT,
                                   ViewGroup.LayoutParams.FILL_PARENT));
   }

   public DragableSpace(Context context, AttributeSet attrs) {

      super(context, attrs);
      mScroller = new Scroller(context);

      mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();

      this.setLayoutParams(new ViewGroup.LayoutParams(
                                   ViewGroup.LayoutParams.WRAP_CONTENT ,
                                   ViewGroup.LayoutParams.FILL_PARENT));

      TypedArray a=getContext().obtainStyledAttributes(attrs,R.styleable.DragableSpace);
      mCurrentScreen = a.getInteger(R.styleable.DragableSpace_default_screen, 0);
   }

   @Override
   public boolean onInterceptTouchEvent(MotionEvent ev) {

      /*
       * This method JUST determines whether we want to intercept the motion.
       * If we return true, onTouchEvent will be called and we do the actual
       * scrolling there.
       */

      /*
       * Shortcut the most recurring case: the user is in the dragging state
       * and he is moving his finger. We want to intercept this motion.
       */
      final int action = ev.getAction();

      if ((action == MotionEvent.ACTION_MOVE) && (mTouchState != TOUCH_STATE_REST)) {
        return true;
      }

      final float x = ev.getX();

      switch (action) {
         case MotionEvent.ACTION_MOVE:
            /*
             * mIsBeingDragged == false, otherwise the shortcut would have caught it. Check
             * whether the user has moved far enough from his original down touch.
             */

            /*
             * Locally do absolute value. mLastMotionX is set to the y value
             * of the down event.
             */
            final int xDiff = (int) Math.abs(x - mLastMotionX);

            boolean xMoved = xDiff > mTouchSlop;

            if (xMoved) {
                // Scroll if the user moved far enough along the X axis
                mTouchState = TOUCH_STATE_SCROLLING;
            }
            break;

        case MotionEvent.ACTION_DOWN:
            // Remember location of down touch
            mLastMotionX = x;

            /*
             * If being flinged and user touches the screen, initiate drag;
             * otherwise don't.  mScroller.isFinished should be false when
             * being flinged.
             */
            mTouchState = mScroller.isFinished() ? TOUCH_STATE_REST : TOUCH_STATE_SCROLLING;
            break;

        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            // Release the drag
            mTouchState = TOUCH_STATE_REST;
            break;
    }

    /*
     * The only time we want to intercept motion events is if we are in the
     * drag mode.
     */
    return mTouchState != TOUCH_STATE_REST;
}

@Override
public boolean onTouchEvent(MotionEvent event) {

    if (mVelocityTracker == null) {
        mVelocityTracker = VelocityTracker.obtain();
    }
    mVelocityTracker.addMovement(event);

    final int action = event.getAction();
    final float x = event.getX();

    switch (action) {
        case MotionEvent.ACTION_DOWN:
            Log.i(LOG_TAG, "event : down");
            /*
             * If being flinged and user touches, stop the fling. isFinished
             * will be false if being flinged.
             */
            if (!mScroller.isFinished()) {
                mScroller.abortAnimation();
            }

            // Remember where the motion event started
            mLastMotionX = x;
            break;
        case MotionEvent.ACTION_MOVE:
            // Log.i(LOG_TAG,"event : move");
            // if (mTouchState == TOUCH_STATE_SCROLLING) {
            // Scroll to follow the motion event
            final int deltaX = (int) (mLastMotionX - x);
            mLastMotionX = x;

            //Log.i(LOG_TAG, "event : move, deltaX " + deltaX + ", mScrollX " + mScrollX);

            if (deltaX < 0) {
                if (mScrollX > 0) {
                    scrollBy(Math.max(-mScrollX, deltaX), 0);
                }
            } else if (deltaX > 0) {
                final int availableToScroll = getChildAt(getChildCount() - 1)
                    .getRight()
                    - mScrollX - getWidth();
                if (availableToScroll > 0) {
                    scrollBy(Math.min(availableToScroll, deltaX), 0);
                }
            }
            // }
            break;
        case MotionEvent.ACTION_UP:
            Log.i(LOG_TAG, "event : up");
            // if (mTouchState == TOUCH_STATE_SCROLLING) {
            final VelocityTracker velocityTracker = mVelocityTracker;
            velocityTracker.computeCurrentVelocity(1000);
            int velocityX = (int) velocityTracker.getXVelocity();

            if (velocityX > SNAP_VELOCITY && mCurrentScreen > 0) {
                // Fling hard enough to move left
                snapToScreen(mCurrentScreen - 1);
            } else if (velocityX < -SNAP_VELOCITY
                    && mCurrentScreen < getChildCount() - 1) {
                // Fling hard enough to move right
                snapToScreen(mCurrentScreen + 1);
            } else {
                snapToDestination();
            }

            if (mVelocityTracker != null) {
                mVelocityTracker.recycle();
                mVelocityTracker = null;
            }
            // }
            mTouchState = TOUCH_STATE_REST;
            break;
        case MotionEvent.ACTION_CANCEL:
            Log.i(LOG_TAG, "event : cancel");
            mTouchState = TOUCH_STATE_REST;
    }
    mScrollX = this.getScrollX();

    return true;
}

private void snapToDestination() {
    final int screenWidth = getWidth();
    final int whichScreen = (mScrollX + (screenWidth / 2)) / screenWidth;
    Log.i(LOG_TAG, "from des");
    snapToScreen(whichScreen);
}

public void snapToScreen(int whichScreen) {         
    Log.i(LOG_TAG, "snap To Screen " + whichScreen);
    mCurrentScreen = whichScreen;
    final int newX = whichScreen * getWidth();
    final int delta = newX - mScrollX;
    mScroller.startScroll(mScrollX, 0, delta, 0, Math.abs(delta) * 2);             
    invalidate();
}

public void setToScreen(int whichScreen) {
    Log.i(LOG_TAG, "set To Screen " + whichScreen);
    mCurrentScreen = whichScreen;
    final int newX = whichScreen * getWidth();
    mScroller.startScroll(newX, 0, 0, 0, 10);             
    invalidate();
}

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    int childLeft = 0;

    final int count = getChildCount();
    for (int i = 0; i < count; i++) {
        final View child = getChildAt(i);
        if (child.getVisibility() != View.GONE) {
            final int childWidth = child.getMeasuredWidth();
            child.layout(childLeft, 0, childLeft + childWidth, child
                    .getMeasuredHeight());
            childLeft += childWidth;
        }
    }

}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    final int width = MeasureSpec.getSize(widthMeasureSpec);
    final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    if (widthMode != MeasureSpec.EXACTLY) {
        throw new IllegalStateException("error mode.");
    }

    final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
    if (heightMode != MeasureSpec.EXACTLY) {
        throw new IllegalStateException("error mode.");
    }

    // The children are given the same width and height as the workspace
    final int count = getChildCount();
    for (int i = 0; i < count; i++) {
        getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);
    }
    Log.i(LOG_TAG, "moving to screen "+mCurrentScreen);
    scrollTo(mCurrentScreen * width, 0);      
}  

@Override
public void computeScroll() {
    if (mScroller.computeScrollOffset()) {
        mScrollX = mScroller.getCurrX();
        scrollTo(mScrollX, 0);
        postInvalidate();
    }
}
}
.

Allora il mio layout principale. / P>

<?xml version="1.0" encoding="utf-8"?>
<com.matthieu.launcher.DragableSpace xmlns:app="http://schemas.android.com/apk/res/com.matthieu.launcher" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/space" android:layout_width="fill_parent" android:layout_height="fill_parent" app:default_screen="1">
   <include android:id="@+id/left" layout="@layout/left_screen" />
   <include android:id="@+id/center" layout="@layout/initial_screen" />
   <include android:id="@+id/right" layout="@layout/right_screen" />
</com.matthieu.launcher.DragableSpace>
.

Ho anche altri 3 file di layout chiamati iniziali, sinistra e destra (_screen)

È stato utile?

Soluzione

Avrai bisogno di modificare il tuo manifest, in modo che l'applicazione sa quale attività utilizzare quando viene lanciato prima.

  <application>  
    <activity android:name=".YourActivityName" android:label="Your Label">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
  </application>
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top