1

写真のランダムなスライドショーと、クリックできる下部の小さなサムネイルがあるライブ壁紙アプリを作成しています。複数のクラスを拡張する必要がありましたが、そこが行き詰まっていると思います。助けてください。

ライブ壁紙クラス:

import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.service.wallpaper.WallpaperService;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.View;
import android.widget.AdapterView;

public class LiveWallpaper extends WallpaperService{

public static final String SHARED_PREFS_NAME = "livewallpapersettings";


 @Override
 public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();
}


@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
}


@Override
public Engine onCreateEngine() {
    // TODO Auto-generated method stub
    return new TestPatternEngine();
}

class TestPatternEngine extends Engine implements
                           SharedPreferences.OnSharedPreferenceChangeListener 
{
    /*Instance variables.*/
    private AdapterView parent;
    private View v;
    private int position;
    private long id;
    private Bundle savedInstanceState;
    private final Handler mHandler = new Handler();
    private MainActivity        mMainActivity;
    private boolean             mVisible;
    private String              mMode = "random";
    private String              mTransition = "fade";
    private float               mTouchX         = -1;
    private float               mTouchY         = -1;
    private SharedPreferences   mPreferences;
    private final Runnable      mStartApp = new Runnable(){
        public void run() {
            mMainActivity = new MainActivity();
            mMainActivity.onCreate(savedInstanceState);
        }
    };

    TestPatternEngine() {
        mPreferences = LiveWallpaper.this.getSharedPreferences(SHARED_PREFS_NAME, 0);
        mPreferences.registerOnSharedPreferenceChangeListener(this);
        onSharedPreferenceChanged(mPreferences,null);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
        // TODO Auto-generated method stub
        mMode = prefs.getString("livewallpaper_mode", "random");
        mTransition = prefs.getString("livewallpaper_transitions", "fade");


    }

    @Override
    public void onCreate(SurfaceHolder surfaceHolder) {
        // TODO Auto-generated method stub
        super.onCreate(surfaceHolder);
        setTouchEventsEnabled(true);
    }

    @Override
    public void onDestroy()
    {
        super.onDestroy();
        mHandler.removeCallbacks(mStartApp);
    }

    @Override
    public void onVisibilityChanged(boolean visible)
    {
        mVisible = visible;
        if (visible)
        {
            mMainActivity.onCreate(savedInstanceState);
        }
        else
        {
            mHandler.removeCallbacks(mStartApp);
        }
    }

    @Override
    public void onTouchEvent(MotionEvent event)
    {
        if (event.getAction() == MotionEvent.ACTION_MOVE)
        {
            mTouchX = event.getX();
            mTouchY = event.getY();
        }
        else
        {
            mTouchX = -1;
            mTouchY = -1;
        }
        super.onTouchEvent(event);
         }
     }
}

主な活動クラス:

         import java.util.Random;
         import java.util.Timer;
         import java.util.TimerTask;
         import com.example.LiveWallpaper.LiveWallpaper.TestPatternEngine;
         import android.app.Activity;
         import android.content.Context;
         import android.content.SharedPreferences;
         import android.os.Bundle;
         import android.os.Handler;
         import android.view.View;
         import android.view.ViewGroup;
         import android.view.Window;
         import android.view.animation.AnimationUtils;
         import android.widget.AdapterView;
         import android.widget.BaseAdapter;
         import android.widget.Gallery;
         import android.widget.Gallery.LayoutParams;
         import android.widget.ImageSwitcher;
         import android.widget.ImageView;
         import android.widget.ViewSwitcher;

         public class MainActivity extends Activity implements
                      AdapterView.OnItemSelectedListener,ViewSwitcher.ViewFactory{

     private final Handler mHandler = new Handler();
     private int position =0;


@Override
public void onCreate(Bundle savedInstanceState) {
    int delay = 1000;
    int period = 3000;
    Timer timer = new Timer();
    timer.schedule(new TimerTask(){

        @Override
        public void run() {
            // TODO Auto-generated method stub
            runOnUiThread(new Runnable(){

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                        Random rand = new Random();
                        position = rand.nextInt(mImageIds.length);
                        mSwitcher.setImageResource(mImageIds[position]);
                    }
            });
        }

    }, delay, period);
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);


    setContentView(R.layout.activity_main);

    mSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
    mSwitcher.setFactory(this);
    mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
            android.R.anim.fade_in));
    mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
            android.R.anim.fade_out));

    Gallery g = (Gallery) findViewById(R.id.gallery);
    g.setAdapter(new ImageAdapter(this));
    g.setOnItemSelectedListener(this);
}

public void onItemSelected(AdapterView parent, View v, int position, long id) {
    mSwitcher.setImageResource(mImageIds[position]);
}

public void onNothingSelected(AdapterView parent) {
}

public View makeView() {
    ImageView i = new ImageView(this);
    i.setBackgroundColor(0xFF000000);
    i.setScaleType(ImageView.ScaleType.FIT_CENTER);
    i.setLayoutParams(new ImageSwitcher.LayoutParams(
            LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    return i;
}

private ImageSwitcher mSwitcher;

public class ImageAdapter extends BaseAdapter {
    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView i = new ImageView(mContext);

        i.setImageResource(mThumbIds[position]);
        i.setAdjustViewBounds(true);
        i.setLayoutParams(new Gallery.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        i.setBackgroundResource(R.drawable.ic_launcher);
        return i;
    }

    private Context mContext;

}

private Integer[] mThumbIds = { R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image5 };

private Integer[] mImageIds = { R.drawable.image1,
        R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image5};

ログキャット:

     06-18 13:57:49.534: W/dalvikvm(283): threadid=1: thread exiting with uncaught   exception (group=0x4001d800)
     06-18 13:57:49.584: E/AndroidRuntime(283): FATAL EXCEPTION: main
     06-18 13:57:49.584: E/AndroidRuntime(283): java.lang.NullPointerException
     06-18 13:57:49.584: E/AndroidRuntime(283):     at  com.example.Livewallpaper.LiveWallpaper$TestPatternEngine.onVisibilityChanged(LiveWallpaper.java:96)
     06-18 13:57:49.584: E/AndroidRuntime(283):     at  android.service.wallpaper.WallpaperService$Engine.reportVisibility(WallpaperService.java:637)
     06-18 13:57:49.584: E/AndroidRuntime(283):     at android.service.wallpaper.WallpaperService$Engine.doVisibilityChanged(WallpaperService.java :620)
     06-18 13:57:49.584: E/AndroidRuntime(283):     at android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper.executeMessage(WallpaperService.java:835)
     06-18 13:57:49.584: E/AndroidRuntime(283):     at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:61)
     06-18 13:57:49.584: E/AndroidRuntime(283):     at android.os.Handler.dispatchMessage(Handler.java:99)
     06-18 13:57:49.584: E/AndroidRuntime(283):     at android.os.Looper.loop(Looper.java:123)
     06-18 13:57:49.584: E/AndroidRuntime(283):     at android.app.ActivityThread.main(ActivityThread.java:4627)
     06-18 13:57:49.584: E/AndroidRuntime(283):     at java.lang.reflect.Method.invokeNative(Native Method)
     06-18 13:57:49.584: E/AndroidRuntime(283):     at java.lang.reflect.Method.invoke(Method.java:521)
     06-18 13:57:49.584: E/AndroidRuntime(283):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
     06-18 13:57:49.584: E/AndroidRuntime(283):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
     06-18 13:57:49.584: E/AndroidRuntime(283):     at dalvik.system.NativeStart.main(Native Method)
4

0 に答える 0