天天看點

visen動漫項目開發

項目截圖:

visen動漫項目開發

用到開源庫:

lib_ABS

lib_download_fix

lib_material_helper

lib_material_menu

lib_material_menu_abs

lib_nineold_new

lib_ptr

lib_slideMenu

lib_vitamio_fix

lib_yuchen0505

SwitchButton

主要代碼

MainActivity.java類

public class MainActivity extends SherlockFragmentActivity implements

OnItemClickListener, OnClickListener {

private boolean direction;

private DrawerLayout mDrawer;

private String[] list_name = new String[] { "品味動畫", "分類浏覽", "我的收藏", "我的下載下傳" };

private int[] list_p_w_picpath = new int[] { R.drawable.drawer_all,

R.drawable.drawer_light, R.drawable.drawer_heart,

R.drawable.drawer_download };

private ActionBar actionBar;

private MaterialMenuView materialMenu;

    private boolean isNight;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

isNight=readMode();

if(isNight)

{

setTheme(R.style.night);

}

else {

setTheme(R.style.day);

setContentView(R.layout.activity_main);

findViewById(R.id.mode).setOnClickListener(this);

findViewById(R.id.set).setOnClickListener(this);

initCustomActionBar();

initDrawer();

addFirstFragment();

ImageLoaderUtils.readSetting(this);

private boolean readMode() {

SharedPreferences sp = getSharedPreferences("mode", MODE_PRIVATE);

boolean isnight = sp.getBoolean("isnight", false);

return isnight;

private void initCustomActionBar() {

actionBar = getSupportActionBar();

actionBar.setHomeButtonEnabled(false);

actionBar.setDisplayShowHomeEnabled(false);

actionBar.setDisplayShowTitleEnabled(false);

actionBar.setDisplayHomeAsUpEnabled(false);

actionBar.setDisplayShowCustomEnabled(true);

actionBar.setCustomView(R.layout.action_bar);

materialMenu = (MaterialMenuView) actionBar.getCustomView()

.findViewById(R.id.action_bar_menu);

materialMenu.setOnClickListener(this);

private void addFirstFragment() {

FragmentManager fm = getSupportFragmentManager();

FragmentTransaction ft = fm.beginTransaction();

ft.replace(R.id.container, new AnimeTasteFragment());

ft.commit();

private final class DrawerAdapter extends BaseAdapter {

public View getView(int position, View convertView, ViewGroup parent) {

View layout = getLayoutInflater().inflate(R.layout.listitem_menu,

null);

TextView tv_name = (TextView) layout.findViewById(R.id.textView1);

tv_name.setText(list_name[position]);

ImageView im_icon = (ImageView) layout

.findViewById(R.id.p_w_picpathView1);

im_icon.setImageResource(list_p_w_picpath[position]);

return layout;

public long getItemId(int position) {

// TODO Auto-generated method stub

return 0;

public Object getItem(int position) {

return null;

public int getCount() {

return 4;

class MyDrawerListener implements DrawerListener {

public void onDrawerStateChanged(int arg0) {

public void onDrawerSlide(View arg0, float slideOffset) {

materialMenu.setTransformationOffset(

MaterialMenuDrawable.AnimationState.BURGER_ARROW,

direction ? 2 - slideOffset : slideOffset);

public void onDrawerOpened(View arg0) {

direction = true;

public void onDrawerClosed(View arg0) {

direction = false;

private void initDrawer() {

findViewById(R.id.layout).setOnClickListener(new OnClickListener() {

public void onClick(View v) {

});

mDrawer = (DrawerLayout) findViewById(R.id.drawer);

mDrawer.setDrawerListener(new MyDrawerListener());

mDrawer.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);

ListView drawerList = (ListView) findViewById(R.id.listView1);

drawerList.setOnItemClickListener(this);

drawerList.setAdapter(new DrawerAdapter());

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case android.R.id.home:

IconState state = materialMenu.getState();

if (state == IconState.BURGER) {

mDrawer.openDrawer(Gravity.LEFT);

} else {

mDrawer.closeDrawer(Gravity.LEFT);

break;

default:

return super.onOptionsItemSelected(item);

public boolean onCreateOptionsMenu(Menu menu) {

getSupportMenuInflater().inflate(R.menu.main, menu);

// getMenuInflater().inflate(R.menu.main, menu);

return true;

public void onItemClick(AdapterView<?> parent, View view, int position,

long id) {

Fragment fragment = null;

switch (position) {

case 0:

fragment = new AnimeTasteFragment();

case 1:

fragment = new TypeFragment();

case 2:

Intent intent=new Intent(this,Slide_MyfavorActivity.class);

startActivity(intent);

case 3:

Intent intent2=new Intent(this,Slide_DownloadActivity.class);

startActivity(intent2);

        if(fragment!=null)

        {

ft.replace(R.id.container, fragment);

        }

// 關閉側滑菜單

switch (v.getId()) {

case R.id.action_bar_menu:

case R.id.mode:

isNight=!isNight;

savaMode(isNight);

       finish();

       overridePendingTransition(0, 0);

       startActivity(new Intent(this,MainActivity.class));

case R.id.set:

overridePendingTransition(0, 0);

       startActivity(new Intent(this,Slide_SettingActivity.class));

private void savaMode(boolean isNight2) {

sp.edit().putBoolean("isnight", isNight2).commit();

Slide_MyfavorActivity.java類:

public class Slide_MyfavorActivity extends SherlockFragmentActivity implements

OnItemClickListener, OnClickListener ,com.xinbo.widget.ActionSheet.OnActionSheetSelected, OnCancelListener  {

private ListView listView;

List<AnimeCollect> mData = new ArrayList<AnimeCollect>();

private Myadpter adapter;

private BroadcastReceiver receiver=new BroadcastReceiver()

public void onReceive(Context context, Intent intent) {

readcache();

adapter.notifyDataSetChanged();

};

setContentView(R.layout.activity_slidemyfavor);

IntentFilter filter=new IntentFilter();

filter.addAction(Constants.ACTION.UPDATA_FAVOR);

registerReceiver(receiver, filter);

listView = (ListView) findViewById(R.id.listView1);

listView.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView<?> arg0, View arg1,

int posion, long arg3) {

Intent intent=new Intent(Slide_MyfavorActivity.this,DetailActivity.class);

Anime info=new Anime(mData.get(posion).getid(), mData.get(posion).getAuthor(), mData.get(posion).getYear(), mData.get(posion).getDuration(), mData.get(posion).getVideoUrl(), mData.get(posion).getVideoSite(), 

mData.get(posion).getBrief(), mData.get(posion).getHomePic(), mData.get(posion).getDetailPic(), mData.get(posion).getName(), mData.get(posion).getVideoSource() );

intent.putExtra("guess", info);

listView.setOnItemLongClickListener(new OnItemLongClickListener() {

public boolean onItemLongClick(AdapterView<?> arg0, View arg1,

final AnimeCollect anime=mData.get(posion);

AlertDialog.Builder builder = new AlertDialog.Builder(Slide_MyfavorActivity.this);

builder.setTitle("提示");

builder.setMessage("确定要删除嗎?");

builder.setNegativeButton("取消", null);

builder.setPositiveButton("确定",

new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

DBManager.deleteCacheBytitle(anime);

        adapter.notifyDataSetChanged();

AlertDialog create = builder.create();

create.show();

return false;

        adapter = new Myadpter();

        listView.setAdapter(adapter);

private void readcache() {

mData.clear();

mData = new Select().from(AnimeCollect.class).execute();

//接受廣播

protected void onDestroy() {

unregisterReceiver(receiver);

super.onDestroy();

class Myadpter extends BaseAdapter

return mData.size();

View layout = null;

viewHold vHold = null;

if (convertView == null) {

layout =getLayoutInflater().inflate(

R.layout.listitem_guess, null);

ImageView p_w_picpathView = (ImageView) layout

TextView tv_title = (TextView) layout

.findViewById(R.id.tv_title);

TextView tv_subtitle = (TextView) layout

.findViewById(R.id.tv_subtitle);

vHold = new viewHold(p_w_picpathView, tv_title, tv_subtitle);

layout.setTag(vHold);

layout = convertView;

vHold = (viewHold) layout.getTag();

AnimeCollect anime = mData.get(position);

vHold.tv_title.setText(anime.getName());

vHold.tv_subtitle.setText(anime.getBrief());

//UILUtils.displayImage(anime.getHomePic(), vHold.p_w_picpathView);

ImageLoaderUtils.displayImage(Slide_MyfavorActivity.this,anime.getHomePic(), vHold.p_w_picpathView);

class viewHold {

ImageView p_w_picpathView;

TextView tv_title;

TextView tv_subtitle;

public viewHold(ImageView p_w_picpathView, TextView tv_title,

TextView tv_subtitle) {

super();

this.p_w_picpathView = p_w_picpathView;

this.tv_title = tv_title;

this.tv_subtitle = tv_subtitle;

MaterialMenuView materialMenu = (MaterialMenuView) actionBar.getCustomView()

finish();

case R.id.menu_delete:

ActionSheet.showSheet(Slide_MyfavorActivity.this, Slide_MyfavorActivity.this, Slide_MyfavorActivity.this);

getSupportMenuInflater().inflate(R.menu.slidemyfavor, menu);

if (v.getId() == R.id.action_bar_menu) {

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

public void onCancel(DialogInterface dialog) {

public void onClick(int whichButton) {

switch (whichButton) {

DBManager.deleteCache();

        mData.clear();

Slide_DownloadActivity類:

public class Slide_DownloadActivity extends SherlockFragmentActivity implements

OnItemClickListener, OnClickListener ,com.xinbo.widget.ActionSheet.OnActionSheetSelected, OnCancelListener {

private Myreceiver mReceiver=new Myreceiver();

List<AnimeDownload> mData = new ArrayList<AnimeDownload>();

class Myreceiver extends BroadcastReceiver {

handleIntent(intent);

private void handleIntent(Intent intent) {

if (intent != null

&& intent

.getAction()

.equals("com.yyxu.download.activities.DownloadListActivity")) {

int type = intent.getIntExtra(MyIntents.TYPE, -1);

String url;

switch (type) {

case MyIntents.Types.PROCESS:

url = intent.getStringExtra(MyIntents.URL);

String progress = intent

.getStringExtra(MyIntents.PROCESS_PROGRESS);   

int first = listView.getFirstVisiblePosition();

int count = listView.getChildCount();

for (int i = 0; i < count; i++) {

AnimeDownload info = mData.get(i + first);

// if (info.getVideoUrl().equals(url)){

View layout = listView.getChildAt(i);

TextView tvProgress = (TextView) layout

.findViewById(R.id.tv_sped);

tvProgress.setText(progress+"%");

// return;

// }

setContentView(R.layout.activity_slidedownload);

initListview();

register();

private void initListview() {

public void onItemClick(AdapterView<?> arg0, View arg1, int posion,

long arg3) {

Intent intent = new Intent(Slide_DownloadActivity.this,

DetailActivity.class);

Anime info = new Anime(mData.get(posion).getid(), mData.get(

posion).getAuthor(), mData.get(posion).getYear(), mData

.get(posion).getDuration(), mData.get(posion)

.getVideoUrl(), mData.get(posion).getVideoSite(), mData

.get(posion).getBrief(),

mData.get(posion).getHomePic(), mData.get(posion)

.getDetailPic(), mData.get(posion).getName(),

mData.get(posion).getVideoSource());

final AnimeDownload anime = mData.get(posion);

AlertDialog.Builder builder = new AlertDialog.Builder(

Slide_DownloadActivity.this);

public void onClick(DialogInterface dialog,

int which) {

DBManager.deletedownBytitle(anime);

adapter = new Myadpter();

listView.setAdapter(adapter);

private void register() {

IntentFilter filter = new IntentFilter();

filter.addAction("com.yyxu.download.activities.DownloadListActivity");

registerReceiver(mReceiver, filter);

mData = new Select().from(AnimeDownload.class).execute();

if(mReceiver!=null)

unregisterReceiver(mReceiver);

class Myadpter extends BaseAdapter {

layout = getLayoutInflater().inflate(R.layout.listitem_guess,

TextView tv_sped = (TextView) layout.findViewById(R.id.tv_sped);

tv_sped.setVisibility(View.VISIBLE);

vHold = new viewHold(p_w_picpathView, tv_title, tv_subtitle, tv_sped);

AnimeDownload anime = mData.get(position);

            ImageLoaderUtils.displayImage(Slide_DownloadActivity.this,anime.getHomePic(), vHold.p_w_picpathView);

TextView tv_sped;

TextView tv_subtitle, TextView tv_sped) {

this.tv_sped = tv_sped;

MaterialMenuView materialMenu = (MaterialMenuView) actionBar

.getCustomView().findViewById(R.id.action_bar_menu);

ActionSheet.showSheet(Slide_DownloadActivity.this, Slide_DownloadActivity.this, Slide_DownloadActivity.this);

DBManager.deletedownCache();

DetailActivity類:

public class DetailActivity extends SherlockFragmentActivity implements

private Anime anime;

private boolean mFavor;

private VideoView mVideoView;

private ProgressBar progressBar;

private ImageView img_play;

private TextView tv_title;

private TextView tv_author;

private TextView tv_content;

ArrayList<Anime> mData = new ArrayList<Anime>();

private ListView dlListView;

private ScrollView scrollView;

private Myadpter adpter;

private MediaController controller;

private Mybinder mBinder;

private boolean isFisrt;

private ServiceConnection mConn = new ServiceConnection() {

public void onServiceDisconnected(ComponentName name) {

public void onServiceConnected(ComponentName name, IBinder service) {

mBinder = (Mybinder) service;

if (!LibsChecker.checkVitamioLibs(this)) {

return;

setContentView(R.layout.activity_detail);

Intent intent = getIntent();

anime = (Anime) intent.getParcelableExtra("guess");

isFisrt = readmode();

initdetaiData();

progressBar = (ProgressBar) findViewById(R.id.progressBar1);

progressBar.setVisibility(View.INVISIBLE);

img_play = (ImageView) findViewById(R.id.btn_play);

mVideoView = (VideoView) findViewById(R.id.video_view);

controller = new MediaController(this);

mVideoView.setMediaController(controller);

mVideoView.requestFocus();

mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

public void onPrepared(MediaPlayer mediaPlayer) {

// optional need Vitamio 4.0

mediaPlayer.setPlaybackSpeed(1.0f);

dlListView = (ListView) findViewById(R.id.listView2);

scrollView = (ScrollView) findViewById(R.id.scrollView1);

tv_title = (TextView) findViewById(R.id.tv_title);

tv_author = (TextView) findViewById(R.id.tv_author);

tv_content = (TextView) findViewById(R.id.tv_content);

adpter = new Myadpter();

dlListView.setAdapter(adpter);

dlListView.setOnItemClickListener(new OnItemClickListener() {

int positon, long arg3) {

Intent intent = new Intent(DetailActivity.this,

intent.putExtra("guess", mData.get(positon));

tv_title.setText(anime.getName());

tv_author.setText(anime.getAuthor() + "." + anime.getYear());

tv_content.setText(anime.getBrief());

mFavor = DBManager.isFavor(anime);

scrollView.smoothScrollTo(0, 0);

private boolean readmode() {

SharedPreferences sp = getSharedPreferences("first", MODE_PRIVATE);

boolean isFirst = sp.getBoolean("isfirst", false);

return isFirst;

public void editdilog(View v) {

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setTitle("請寫下你的感受");

View view = getLayoutInflater().inflate(R.layout.editview2, null);

builder.setView(view);

builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

private void savaMode(boolean isfirst) {

sp.edit().putBoolean("isfirst", isfirst).commit();

public void btnPlay(View v) {

img_play.setVisibility(View.INVISIBLE);

progressBar.setVisibility(View.VISIBLE);

isFisrt = !isFisrt;

savaMode(isFisrt);

if (isFisrt) {

mVideoView

.setVideoPath("http://xinbo.qiniudn.com/videoviewdemo.mp4");

controller.setAnchorView(mVideoView);

Intent intent = new Intent(this, VideoWebviewActivity.class);

String videourl = anime.getVideoUrl();

Log.e("videourl", videourl);

intent.putExtra("Videourl", videourl);

private void initdetaiData() {

ApiConnector.getInstance(this).getRandom(5, new VolleyListener() {

public void onErrorResponse(VolleyError arg0) {

public void onResponse(String response) {

Init init = GsonUtils.parseJSON(response, Init.class);

mData = init.getData().getList().getAnime();

adpter.notifyDataSetChanged();

public Object getItem(int arg0) {

public long getItemId(int arg0) {

public View getView(int position, View convertView, ViewGroup arg2) {

Anime anime = mData.get(position);

            ImageLoaderUtils.displayImage(DetailActivity.this, anime.getHomePic(), vHold.p_w_picpathView);

case R.id.menu_favor:

if (mFavor) {

mFavor = false;

item.setIcon(R.drawable.ic_action_action_favorite_outline);

DBManager.cancelFavor(anime);

ToastUtils.showToast(this, "取消收藏");

// 發送廣播

Intent intent = new Intent();

intent.setAction(Constants.ACTION.UPDATA_FAVOR);

sendBroadcast(intent);

DBManager.addFavorToCache(anime);

ToastUtils.showToast(this, "收藏成功");

item.setIcon(R.drawable.ic_action_action_favorite);

mFavor = true;

case R.id.menu_download:

downLoad();

private void downLoad() {

if (mBinder != null) {

mBinder.download(anime.getName());

DBManager.addDownloadToCache(anime);

protected void onStart() {

super.onStart();

// 啟動NotifiService更新通知

Intent intent = new Intent(this, NotifyService.class);

startService(intent);

bindService(intent, mConn, Context.BIND_AUTO_CREATE);

protected void onStop() {

super.onStop();

unbindService(mConn);

public boolean onPrepareOptionsMenu(Menu menu) {

MenuItem item = menu.getItem(0);

return super.onPrepareOptionsMenu(menu);

getSupportMenuInflater().inflate(R.menu.detail, menu);

Slide_SettingActivity類:

public class Slide_SettingActivity extends SherlockFragmentActivity implements

private String[] name = new String[] { "Only for Wife", "高清視訊", "字型大小",

"清空緩存", "檢查更新", "推薦給小夥伴", "為我們評分" };

listView.setOnItemClickListener(this);

return name.length;

View layout = getLayoutInflater().inflate(

R.layout.listitem_setting, null);

TextView mtextView = (TextView) layout.findViewById(R.id.textView1);

SwitchButton mSwitch = (SwitchButton) layout

.findViewById(R.id.sb_default);

if (position == 0) {

p_w_picpathView.setVisibility(View.INVISIBLE);

mSwitch.setVisibility(View.VISIBLE);

SharedPreferences sp = getSharedPreferences("setting",

Context.MODE_PRIVATE);

boolean isWifiOnly = sp.getBoolean("IS_WIFI_ONLY", false);

if (isWifiOnly) {

mSwitch.setChecked(true);

mSwitch.setChecked(false);

mSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {

public void onCheckedChanged(CompoundButton arg0, boolean checked) {

if(checked)

sp.edit().putBoolean("IS_WIFI_ONLY", true).commit();

sp.edit().putBoolean("IS_WIFI_ONLY", false).commit();

ImageLoaderUtils.readSetting(Slide_SettingActivity.this);

if (position == 1) {

mtextView.setText(name[position]);

getSupportMenuInflater().inflate(R.menu.slidesetting, menu);

switch (posion) {

editdilog();

clearCache();

case 4:

upVersion();

case 6:

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setData(Uri.parse("market://details?id="

+ "com.lashou.groupurchasing"));

private void clearCache() {

Slide_SettingActivity.this);

builder.setMessage("确定要清空嗎?");

private void upVersion() {

String url = "http://7xj77y.com1.z0.glb.clouddn.com/upgrade.txt";

HTTPUtils.get(this, url, new VolleyListener() {

VersionInfo verInfo = GsonUtils.parseJSON(response,

VersionInfo.class);

int currVersion = getCurrVersion();

if (verInfo.new_version > currVersion) {

// json

UpgradeDialogFragment dlg = new UpgradeDialogFragment();

dlg.setVersionInfo(verInfo);

dlg.show(getSupportFragmentManager(), null);

public int getCurrVersion() {

PackageManager pm = this.getPackageManager();

try {

PackageInfo packageInfo = pm.getPackageInfo(this.getPackageName(),

0);

return packageInfo.versionCode;

} catch (NameNotFoundException e) {

public void editdilog() {

builder.setTitle("請選擇字型大小");

View view = getLayoutInflater().inflate(R.layout.editview, null);

SplashActivity類:

public class SplashActivity extends Activity {

setContentView(R.layout.activity_splash);

new Handler().postDelayed(new Runnable() {

public void run() {

startActivity(new Intent(SplashActivity.this,

MainActivity.class));

}, 2000);

getMenuInflater().inflate(R.menu.splash, menu);

VideoWebviewActivity類:

public class VideoWebviewActivity extends SherlockFragmentActivity implements  OnClickListener{

    private WebView mWebView;

private ProgressBar mProgressBar;

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.webview);

        initCustomActionBar();

        initWebview();

    }

    private void initWebview() {

mWebView = (WebView) findViewById(R.id.webView1);

mProgressBar = (ProgressBar) findViewById(R.id.progressBar1);

String url=intent.getStringExtra("Videourl");

WebSettings settings = mWebView.getSettings();

settings.setJavaScriptEnabled(true);

mWebView.setWebViewClient(new WebViewClient());

mWebView.setWebChromeClient(new WebChromeClient(){

public void onProgressChanged(WebView view, int newProgress) {

super.onProgressChanged(view, newProgress);

if(newProgress==100)

mProgressBar.setVisibility(View.INVISIBLE);

mProgressBar.setVisibility(View.VISIBLE);

mProgressBar.setProgress(newProgress);

mWebView.loadUrl(url);