activity_kao
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="5dp" android:paddingTop="5dp" tools:context="com.bwie.test.app_demo.KaoActivity"> <ImageView android:id="@+id/imageView_b" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="5dp" android:paddingTop="5dp" android:src="@drawable/main_menu_button"/> <ImageView android:id="@+id/imageView_a" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="5dp" android:paddingTop="5dp" android:src="@drawable/menu_icn_plus"/> <ImageView android:id="@+id/imageView_c" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="5dp" android:paddingTop="5dp" android:src="@drawable/menu_music"/> <ImageView android:id="@+id/imageView_d" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="5dp" android:paddingTop="5dp" android:src="@drawable/menu_place"/> <ImageView android:id="@+id/imageView_e" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="5dp" android:paddingTop="5dp" android:src="@drawable/menu_sleep"/> <ImageView android:id="@+id/imageView_f" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="1dp" android:src="@drawable/menu_thought"/> <ImageView android:id="@+id/imageView_g" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="22dp" android:paddingTop="22dp" android:src="@drawable/menu_with"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="100dp" android:text="跳转" android:onClick="tiaozhuan"/> </FrameLayout>
activity_gao
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bwie.test.app_demo.GaoActivity"> <com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent"> </com.amap.api.maps.MapView> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Marker" android:onClick="Marker"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳转" android:onClick="tiao"/> </LinearLayout> </RelativeLayout>
activity_shu
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bwie.test.app_demo.ShuActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_View" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView> </LinearLayout>
activity_web
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bwie.test.app_demo.WebActivity"> <WebView android:id="@+id/web_view" android:layout_width="match_parent" android:layout_height="match_parent"> </WebView> </LinearLayout>
item_layout
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:id="@+id/image_item" android:layout_width="100dp" android:layout_height="100dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/title_item" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/time_item" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout>
KaoActivity
import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.animation.BounceInterpolator; import android.widget.ImageView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class KaoActivity extends AppCompatActivity implements View.OnClickListener{ private int[] res={R.id.imageView_a,R.id.imageView_b,R.id.imageView_c, R.id.imageView_d,R.id.imageView_e,R.id.imageView_f,R.id.imageView_g}; private List<ImageView> imageViewList = new ArrayList<ImageView>(); private Boolean flag = false; private PropertyValuesHolder p1,p2; @Override public void onClick(View v) { switch (v.getId()) { case R.id.imageView_g: if(!flag) startAnimation(); else closeAnimation(); break; default: Toast.makeText(KaoActivity.this, " " + v.getId(), Toast.LENGTH_SHORT).show(); break; } } private void closeAnimation() { ObjectAnimator.ofFloat(imageViewList.get(6),"rotation",20f,360f).setDuration(1000).start(); for (int i=0;i<res.length-2;i++) { ObjectAnimator animator = ObjectAnimator.ofFloat(imageViewList.get(i),"translationY",i*60f,0f); animator.setDuration(1000); animator.setInterpolator(new BounceInterpolator()); animator.setStartDelay(i*300); animator.start(); } flag = false; } /* 开始动画 */ private void startAnimation() { ObjectAnimator.ofFloat(imageViewList.get(6),"rotation",20f,360f).setDuration(1000).start(); for (int i=0;i<res.length-2;i++) { ObjectAnimator animator = ObjectAnimator.ofFloat(imageViewList.get(i),"translationY",0f,i*60f); animator.setDuration(1000); animator.setInterpolator(new BounceInterpolator()); animator.setStartDelay(i*300); animator.start(); } flag = true; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_kao); //隐藏原有标题 getSupportActionBar().hide(); //查找控件 for(int i=0;i<res.length;i++) { ImageView imageView = (ImageView)findViewById(res[i]); imageView.setOnClickListener(this); imageViewList.add(imageView); } } public void tiaozhuan(View view) { Intent intent = new Intent(KaoActivity.this, GaoActivity.class); startActivity(intent); } }
GaoActivity
import android.content.Intent; import android.os.Bundle; import android.os.PersistableBundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.View; import android.widget.Toast; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; import com.amap.api.maps.AMap; import com.amap.api.maps.LocationSource; import com.amap.api.maps.MapView; import com.amap.api.maps.model.MyLocationStyle; public class GaoActivity extends AppCompatActivity implements LocationSource,AMapLocationListener{ private MapView mMapView ; OnLocationChangedListener mListener; AMapLocationClient mlocationClient; AMapLocationClientOption mLocationOption; private AMapLocationClient mLocationClient; private StringBuilder stringBuilder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gao); //隐藏原有标题 getSupportActionBar().hide(); mMapView = (MapView) findViewById(R.id.map); //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图 mMapView.onCreate(savedInstanceState); AMap aMap = null; if (aMap == null) { aMap = mMapView.getMap(); } aMap.setLocationSource(this); aMap.setMyLocationEnabled(true); aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE); MyLocationStyle myLocationStyle; myLocationStyle = new MyLocationStyle(); myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE); myLocationStyle.interval(2000); aMap.setMyLocationStyle(myLocationStyle); myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE); aMap.setMyLocationEnabled(true); } @Override protected void onDestroy() { super.onDestroy(); mMapView.onDestroy(); if(null != mlocationClient){ mlocationClient.onDestroy(); } } @Override protected void onResume() { super.onResume(); mMapView.onResume(); } @Override protected void onPause() { super.onPause(); mMapView.onPause(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); } public void Marker(View view) { mLocationClient = new AMapLocationClient(this); mLocationClient.setLocationListener(this); AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setOnceLocation(true); mLocationOption.setOnceLocationLatest(true); mLocationClient.setLocationOption(mLocationOption); Toast.makeText(this, "我的地址是:"+ stringBuilder.toString(), Toast.LENGTH_SHORT).show(); } //跳转 public void tiao(View view) { Intent intent = new Intent(GaoActivity.this, ShuActivity.class); startActivity(intent); } @Override public void activate(OnLocationChangedListener onLocationChangedListener) { mListener = onLocationChangedListener; if (mlocationClient == null) { //初始化定位 mlocationClient = new AMapLocationClient(this); //初始化定位参数 mLocationOption = new AMapLocationClientOption(); //设置定位回调监听 mlocationClient.setLocationListener(this); //设置为高精度定位模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置定位参数 mlocationClient.setLocationOption(mLocationOption); mlocationClient.startLocation(); } } @Override public void deactivate() { mListener = null; if (mlocationClient != null) { mlocationClient.stopLocation(); mlocationClient.onDestroy(); } mlocationClient = null; } @Override public void onLocationChanged(AMapLocation aMapLocation) { if (mListener != null&&aMapLocation != null) { if (aMapLocation != null &&aMapLocation.getErrorCode() == 0) { mListener.onLocationChanged(aMapLocation);// 显示系统小蓝点 } else { String errText = "定位失败," + aMapLocation.getErrorCode()+ ": " + aMapLocation.getErrorInfo(); Log.e("AmapErr",errText); } } stringBuilder = new StringBuilder(); //stringBuilder.append("经纬度:"+amapLocation.getLatitude()+"--"+amapLocation.getLongitude()); // stringBuilder.append("地址:"+amapLocation.getAddress()+"--"); // stringBuilder.append("地址:"+amapLocation.getCountry()+"--"); // stringBuilder.append("地址:"+amapLocation.getProvince()+"--"); stringBuilder.append(""+aMapLocation.getCity()+"--"); stringBuilder.append(""+aMapLocation.getDistrict()+"--"); stringBuilder.append(""+aMapLocation.getStreet()+"--"); stringBuilder.append(""+aMapLocation.getStreetNum()+""); //itemMap.setText(stringBuilder.toString()); } }
ShuActivity
import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.View; import com.bwie.test.adapter.MyAdapter; import com.bwie.test.bean.GoodsBean; import com.bwie.test.presenter.GoodsPresenter; import com.bwie.test.util.inter.OnItemClickListener; import com.bwie.test.view.MainView; import java.util.List; public class ShuActivity extends AppCompatActivity implements MainView{ private RecyclerView recycler_view; private GoodsPresenter goodsPresenter; private String GoodsUrl = "http://api.tianapi.com/startup/? key=71e58b5b2f930eaf1f937407acde08fe&num=10"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_shu); //隐藏由于标题 getSupportActionBar().hide(); //查找控件 recycler_view = findViewById(R.id.recycler_View); goodsPresenter = new GoodsPresenter(this); goodsPresenter.getData(GoodsUrl); } @Override public void onSuccess(final GoodsBean goodsBean) { runOnUiThread(new Runnable() { @Override public void run() { final List<GoodsBean.NewslistBean> list = goodsBean.getNewslist(); recycler_view.setLayoutManager(new LinearLayoutManager(ShuActivity.this)); MyAdapter myAdapter = new MyAdapter(ShuActivity.this,list); recycler_view.setAdapter(myAdapter); myAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(int position) { Intent intent = new Intent(ShuActivity.this, WebActivity.class); intent.putExtra("url",list.get(position).getUrl()); startActivity(intent); } }); } }); } @Override protected void onDestroy() { super.onDestroy(); if(goodsPresenter!=null){ goodsPresenter.onBind(); } } }
WebActivity
import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class WebActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_web); //隐藏原有标题 getSupportActionBar().hide(); WebView webView = findViewById(R.id.web_view); Intent intent = getIntent(); String url = intent.getStringExtra("url"); //加载 webView.loadUrl(url); //设置 webView.setWebViewClient(new WebViewClient()); WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setJavaScriptCanOpenWindowsAutomatically(true); } }
adapter文件夹下MyAdapter
import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import com.bumptech.glide.Glide; import com.bwie.test.bean.GoodsBean; import com.bwie.test.util.inter.OnItemClickListener; import com.bwie.test.app_demo.R; import java.util.List; public class MyAdapter extends RecyclerView.Adapter<MyHolder> { Context context; List<GoodsBean.NewslistBean> list; private OnItemClickListener mOnItemClickListener; public MyAdapter(Context context, List<GoodsBean.NewslistBean> list) { this.context = context; this.list = list; } @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.item_layout, null); MyHolder myHolder = new MyHolder(view); return myHolder; } @Override public void onBindViewHolder(MyHolder holder, final int position) { holder.title_item.setText(list.get(position).getTitle()); holder.time_item.setText(list.get(position).getCtime()); Glide.with(context).load(list.get(position).getPicUrl()).placeholder(R.mipmap.ic_launcher) .into(holder.image_item); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mOnItemClickListener.onItemClick(position); } }); } @Override public int getItemCount() { return list.size(); } public void setOnItemClickListener(OnItemClickListener onItemClickListener ){ this. mOnItemClickListener=onItemClickListener; } }
MyHolder
import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.bwie.test.app_demo.R; public class MyHolder extends RecyclerView.ViewHolder { public ImageView image_item; public TextView title_item,time_item; public MyHolder(View itemView) { super(itemView); image_item = itemView.findViewById(R.id.image_item); title_item = itemView.findViewById(R.id.title_item); time_item = itemView.findViewById(R.id.time_item); } }
model文件夹下GoodsModel
import com.bwie.test.bean.GoodsBean; import com.bwie.test.presenter.GoodsPresenter; import com.bwie.test.presenter.InGoodspresenter; import com.bwie.test.util.OkHttp3Util; import com.google.gson.Gson; import java.io.IOException; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; public class GoodsModel { private final InGoodspresenter inGoodspresenter; public GoodsModel(GoodsPresenter inGoodspresenter) { this.inGoodspresenter = inGoodspresenter; } public void getData(String goodsUrl) { OkHttp3Util.doGet(goodsUrl, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()){ String json = response.body().string(); GoodsBean goodsBean = new Gson().fromJson(json, GoodsBean.class); inGoodspresenter.onSuccess(goodsBean); } } }); } }
presenter文件夹下GoodsPresenter
import com.bwie.test.app_demo.ShuActivity; import com.bwie.test.bean.GoodsBean; import com.bwie.test.model.GoodsModel; import com.bwie.test.view.MainView; public class GoodsPresenter implements InGoodspresenter{ private final GoodsModel goodsModel; private MainView mainView; public GoodsPresenter(ShuActivity mainView) { this.mainView = mainView; goodsModel = new GoodsModel(this); } public void getData(String goodsUrl) { goodsModel.getData(goodsUrl); } @Override public void onSuccess(GoodsBean goodsBean) { mainView.onSuccess(goodsBean); } public void onBind(){ if(mainView!=null){ mainView = null; } } }
InGoodspresenter
import com.bwie.test.bean.GoodsBean; public interface InGoodspresenter { void onSuccess(GoodsBean goodsBean); }
view文件夹下MainView
import com.bwie.test.bean.GoodsBean; public interface MainView { void onSuccess(GoodsBean goodsBean); }
cosset文件夹下EnlargeAnimationOut
import android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.ScaleAnimation; public class EnlargeAnimationOut extends ZoomAnimation{ public EnlargeAnimationOut(int i) { super(ZoomAnimation.Direction.HIDE, i, new View[0]); } @Override protected void addShrinkAnimation(View[] views) { addAnimation(new ScaleAnimation(1F, 5F, 1F, 5F, 1, 0.5F, 1, 0.5F)); addAnimation(new AlphaAnimation(1F, 0F)); } @Override protected void addEnlargeAnimation(View[] views) { } }
ImageButtonExtend
import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.animation.Animation; import android.widget.ImageButton; public class ImageButtonExtend extends android.support.v7.widget.AppCompatImageButton { private Animation animation; public ImageButtonExtend(Context context) { super(context); } public ImageButtonExtend(Context context, AttributeSet attrs) { super(context, attrs); } public ImageButtonExtend(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void startAnimation(Animation animation) { super.startAnimation(animation); this.animation = animation; getRootView().postInvalidate(); } @Override protected void onAnimationEnd() { super.onAnimationEnd(); if ((this.animation instanceof ZoomAnimation)) { setVisibility(((ZoomAnimation) this.animation).direction != ZoomAnimation.Direction.SHOW ? View.VISIBLE : View.GONE); } } @Override protected void onAnimationStart() { super.onAnimationStart(); if ((this.animation instanceof ZoomAnimation)){ setVisibility(View.VISIBLE); } } }
ShrinkAnimationOut
import android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.ScaleAnimation; public class ShrinkAnimationOut extends ZoomAnimation{ public ShrinkAnimationOut(int i) { super(ZoomAnimation.Direction.SHOW, i, new View[0]); } @Override protected void addShrinkAnimation(View[] views) { } @Override protected void addEnlargeAnimation(View[] views) { addAnimation(new ScaleAnimation(1F, 0F, 1F, 0F, 1, 0.5F, 1, 0.5F)); addAnimation(new AlphaAnimation(1F, 0F)); } }
ShrinkRelativeLayout
import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.animation.Animation; import android.widget.RelativeLayout; public class ShrinkRelativeLayout extends RelativeLayout { private Animation animation; public ShrinkRelativeLayout(Context context) { super(context); } public ShrinkRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); } public ShrinkRelativeLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void startAnimation(Animation animation) { super.startAnimation(animation); this.animation = animation; getRootView().postInvalidate(); } @Override protected void onAnimationEnd() { super.onAnimationEnd(); if (this.animation instanceof ZoomAnimation) { setVisibility(((ZoomAnimation) animation).direction != ZoomAnimation.Direction.SHOW ? View.VISIBLE : View.GONE); } } @Override protected void onAnimationStart() { super.onAnimationStart(); if (this.animation instanceof ZoomAnimation) { setVisibility(View.VISIBLE); } } }
SpringAnimation
import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.MarginLayoutParams; import android.view.animation.AnticipateOvershootInterpolator; import android.view.animation.OvershootInterpolator; import android.view.animation.TranslateAnimation; public class SpringAnimation extends ZoomAnimation { private static int[] size; private static int xOffset = 210; private static int yOffset = -15; public static final int DURATION = 300; public SpringAnimation(Direction direction, long duration, View view) { super(direction, duration, new View[] { view }); SpringAnimation.xOffset = SpringAnimation.size[0] / 2 - 30; } public static void startAnimations(ViewGroup viewgroup, ZoomAnimation.Direction direction, int[] size) { SpringAnimation.size = size; switch (direction) { case HIDE: startShrinkAnimations(viewgroup); break; case SHOW: startEnlargeAnimations(viewgroup); break; } } /** * 开始呈现菜单 */ private static void startEnlargeAnimations(ViewGroup viewgroup) { for (int i = 0; i < viewgroup.getChildCount(); i++) { if (viewgroup.getChildAt(i) instanceof ImageButtonExtend) { ImageButtonExtend inoutimagebutton = (ImageButtonExtend) viewgroup .getChildAt(i); SpringAnimation animation = new SpringAnimation( ZoomAnimation.Direction.HIDE, DURATION, inoutimagebutton); animation.setStartOffset((i * 200) / (-1 + viewgroup.getChildCount())); animation.setInterpolator(new OvershootInterpolator(4F)); inoutimagebutton.startAnimation(animation); } } } /** * 开始隐藏菜单 */ private static void startShrinkAnimations(ViewGroup viewgroup) { for (int i = 0; i < viewgroup.getChildCount(); i++) { if (viewgroup.getChildAt(i) instanceof ImageButtonExtend) { ImageButtonExtend inoutimagebutton = (ImageButtonExtend) viewgroup .getChildAt(i); SpringAnimation animation = new SpringAnimation( ZoomAnimation.Direction.SHOW, DURATION, inoutimagebutton); animation.setStartOffset((100 * ((-1 + viewgroup .getChildCount()) - i)) / (-1 + viewgroup.getChildCount())); animation.setInterpolator(new AnticipateOvershootInterpolator(2F)); inoutimagebutton.startAnimation(animation); } } } @Override protected void addShrinkAnimation(View[] views) { MarginLayoutParams mlp = (MarginLayoutParams) views[0]. getLayoutParams(); addAnimation(new TranslateAnimation( xOffset + -mlp.leftMargin, 0F,yOffset + mlp.bottomMargin, 0F)); } @Override protected void addEnlargeAnimation(View[] views) { MarginLayoutParams mlp = (MarginLayoutParams) views[0]. getLayoutParams(); addAnimation(new TranslateAnimation( 0F, xOffset + -mlp.leftMargin, 0F,yOffset + mlp.bottomMargin)); } }
ZoomAnimation
import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.animation.AnimationSet; public abstract class ZoomAnimation extends AnimationSet { public Direction direction; public enum Direction { HIDE, SHOW; } public ZoomAnimation(Direction direction, long duration, View[] views) { super(true); this.direction = direction; switch (this.direction) { case HIDE: addShrinkAnimation(views); break; case SHOW: addEnlargeAnimation(views); break; } setDuration(duration); } protected abstract void addShrinkAnimation(View[] views); protected abstract void addEnlargeAnimation(View[] views); }
util文件夹下OnItemClickListener
public interface OnItemClickListener { void onItemClick(int position); }
OkHttp3Util
import android.os.Environment; import java.io.File; import java.util.Map; import java.util.concurrent.TimeUnit; import okhttp3.Cache; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; public class OkHttp3Util { private static OkHttpClient okHttpClient = null; private OkHttp3Util() { } public static OkHttpClient getInstance() { if (okHttpClient == null) { synchronized (OkHttp3Util.class) { if (okHttpClient == null) { File sdcache = new File(Environment.getExternalStorageDirectory(), "cache"); //指定缓存大小 int cacheSize = 10 * 1024 * 1024; okHttpClient = new OkHttpClient.Builder()//构建器 .connectTimeout(15, TimeUnit.SECONDS)//连接超时 .writeTimeout(20, TimeUnit.SECONDS)//写入超时 .readTimeout(20, TimeUnit.SECONDS)//读取超时 //.addInterceptor(new CommonParamsInterceptor()) //.addNetworkInterceptor(new CacheInterceptor()) //.cache(new Cache(sdcache.getAbsoluteFile(), cacheSize)) .cache(new Cache(sdcache.getAbsoluteFile(),cacheSize)) .build(); } } } return okHttpClient; } public static void doGet(String url, Callback callback) { OkHttpClient okHttpClient = getInstance(); //创建Request Request request = new Request.Builder().url(url).build(); //得到Call对象 Call call = okHttpClient.newCall(request); //执行异步请求 call.enqueue(callback); } /** * post请求 */ public static void doPost(String url, Map<String, String> params, Callback callback) { OkHttpClient okHttpClient = getInstance(); FormBody.Builder builder = new FormBody.Builder(); //遍历集合 for (String key : params.keySet()) { builder.add(key, params.get(key)); } Request request = new Request.Builder().url(url).post(builder.build()).build(); Call call = okHttpClient.newCall(request); call.enqueue(callback); } }
使用的依赖
<!-- 允许程序打开网络套接字 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 允许程序设置内置sd卡的写权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 允许程序获取网络状态 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 允许程序访问WiFi网络信息 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 允许程序读写手机状态和身份 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 允许程序访问CellID或WiFi热点来获取粗略的位置 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
compile 'com.amap.api:3dmap:latest.integration' //定位功能 compile 'com.amap.api:location:latest.integration' implementation 'com.android.support:recyclerview-v7:26.1.0' compile 'com.google.code.gson:gson:2.8.2' //gson compile 'com.squareup.okhttp3:okhttp:3.6.0' //ok compile 'com.squareup.okio:okio:1.11.0' compile 'com.github.bumptech.glide:glide:3.7.0'
bean文件夹下GoodsBean
import java.util.List; public class GoodsBean { private int code; private String msg; private List<NewslistBean> newslist; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public List<NewslistBean> getNewslist() { return newslist; } public void setNewslist(List<NewslistBean> newslist) { this.newslist = newslist; } public static class NewslistBean { private String ctime; private String title; private String description; private String picUrl; private String url; public String getCtime() { return ctime; } public void setCtime(String ctime) { this.ctime = ctime; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getPicUrl() { return picUrl; } public void setPicUrl(String picUrl) { this.picUrl = picUrl; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } }