欢迎页面动画 activity-welcome
<?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:orientation="vertical" android:layout_height="match_parent" tools:context="com.example.com.yuekaolianxi.view.welcomeActivity"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/a" android:id="@+id/img"/> </LinearLayout>
view层-welcomeactivity'
package com.example.com.yuekaolianxi.view; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.content.Intent; import android.graphics.drawable.AnimationDrawable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ImageView; import android.widget.Toast; import com.example.com.yuekaolianxi.R; public class welcomeActivity extends AppCompatActivity { private ImageView img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_welcome); img = findViewById(R.id.img); ObjectAnimator animator=ObjectAnimator.ofFloat(img,"rotation",0,360); animator.setDuration(3000); animator.start(); animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); Intent intent = new Intent(welcomeActivity.this,LgoinActivity.class); startActivity(intent); Toast.makeText(welcomeActivity.this,"11111111111",Toast.LENGTH_SHORT).show(); finish(); } }); } }
activity-login
<?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.example.com.yuekaolianxi.view.LgoinActivity"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/qqq" android:id="@+id/im" android:layout_centerInParent="true"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="欢迎登陆" android:layout_below="@+id/im" android:layout_marginTop="90dp" android:layout_centerHorizontal="true" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="跳转" android:id="@+id/btn" android:layout_below="@id/im" android:layout_marginTop="200dp"/> </RelativeLayout>
view层loginactivity'
package com.example.com.yuekaolianxi.view; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import com.example.com.yuekaolianxi.R; import com.umeng.socialize.UMAuthListener; import com.umeng.socialize.UMShareAPI; import com.umeng.socialize.bean.SHARE_MEDIA; import java.util.Map; public class LgoinActivity extends AppCompatActivity { private ImageView im; private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_lgoin); im = findViewById(R.id.im); btn = findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(LgoinActivity.this, MainActivity.class); startActivity(intent); } }); im.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { /* Intent intent = new Intent(LgonActivity.this, MainActivity.class); startActivity(intent);*/ UMAuthListener umAuthListener = new UMAuthListener() { @Override public void onStart(SHARE_MEDIA share_media) { } @Override public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) { Toast.makeText(LgoinActivity.this,map+"",Toast.LENGTH_SHORT).show(); } @Override public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) { } @Override public void onCancel(SHARE_MEDIA share_media, int i) { } }; UMShareAPI.get(LgoinActivity.this).getPlatformInfo(LgoinActivity.this, SHARE_MEDIA.ALIPAY.QQ,umAuthListener); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);
UMShareAPI. get( this).onActivityResult(requestCode, resultCode, data); } }activity-main
<?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:orientation="vertical" android:layout_height="match_parent" tools:context="com.example.com.yuekaolianxi.view.MainActivity"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rec"></android.support.v7.widget.RecyclerView> </LinearLayout>
view层mainactivity
package com.example.com.yuekaolianxi.view; import android.annotation.SuppressLint; import android.content.Intent; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import com.example.com.yuekaolianxi.R; import com.example.com.yuekaolianxi.adapter.MyAdapter; import com.example.com.yuekaolianxi.bean.DataBean; import com.example.com.yuekaolianxi.presenter.MyDataPresenter; import java.util.List; public class MainActivity extends AppCompatActivity implements DataView{ private List<DataBean.NewslistBean> list; private RecyclerView rec; private MyAdapter myAdapter; String url ="http://api.tianapi.com/startup/?key=71e58b5b2f930eaf1f937407acde08fe&num=10"; @SuppressLint("HandlerLeak") private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); list = (List<DataBean.NewslistBean>) msg.obj; myAdapter = new MyAdapter(list, MainActivity.this); rec.setAdapter(myAdapter); myAdapter.setOnclick(new MyAdapter.OnclickListener() { @Override public void onItemClick(int position) { Intent intent = new Intent(MainActivity.this, XiangqingActivity.class); intent.putExtra("url",list.get(position).getUrl()); intent.putExtra("title",list.get(position).getTitle()); intent.putExtra("desc",list.get(position).getDescription()); startActivity(intent); finish(); } }); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rec = findViewById(R.id.rec); rec.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)); MyDataPresenter presenter=new MyDataPresenter(this); presenter.getDataList(url); } @Override public void toBackMain(List<DataBean.NewslistBean> list) { Message msg=new Message(); msg.obj=list; handler.sendMessage(msg); } }
activity-xiangqing
<?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:orientation="vertical" android:layout_height="match_parent" tools:context="com.example.com.yuekaolianxi.view.XiangqingActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="分享" android:id="@+id/tv"/> </LinearLayout>
view层xiangqingactivity
package com.example.com.yuekaolianxi.view; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; import android.widget.Toast; import com.example.com.yuekaolianxi.R; import com.umeng.socialize.ShareAction; import com.umeng.socialize.UMShareListener; import com.umeng.socialize.bean.SHARE_MEDIA; import com.umeng.socialize.media.UMImage; import com.umeng.socialize.media.UMWeb; public class XiangqingActivity extends AppCompatActivity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_xiangqing); tv = findViewById(R.id.tv); tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { UMImage thumb = new UMImage(XiangqingActivity.this, R.drawable.umeng_socialize_qq); UMWeb web = new UMWeb("http://www.baidu.com"); web.setTitle("This is music title");//标题 web.setThumb(thumb); //缩略图 web.setDescription("my description");//描述 new ShareAction(XiangqingActivity.this) .withMedia(web) .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ, SHARE_MEDIA.WEIXIN) .setCallback(umShareListener).open(); } }); } private UMShareListener umShareListener = new UMShareListener() { /** * @descrption 分享开始的回调 * @param platform 平台类型 */ @Override public void onStart(SHARE_MEDIA platform) { } /** * @descrption 分享成功的回调 * @param platform 平台类型 */ @Override public void onResult(SHARE_MEDIA platform) { Toast.makeText(XiangqingActivity.this,"成功了",Toast.LENGTH_LONG).show(); } /** * @descrption 分享失败的回调 * @param platform 平台类型 * @param t 错误原因 */ @Override public void onError(SHARE_MEDIA platform, Throwable t) { Toast.makeText(XiangqingActivity.this,"失败"+t.getMessage(),Toast.LENGTH_LONG).show(); } /** * @descrption 分享取消的回调 * @param platform 平台类型 */ @Override public void onCancel(SHARE_MEDIA platform) { Toast.makeText(XiangqingActivity.this,"取消了",Toast.LENGTH_LONG).show(); } }; }
view层DataView
package com.example.com.yuekaolianxi.view; import com.example.com.yuekaolianxi.bean.DataBean; import java.util.List; /** * Created by linmeihui on 2018/4/5. */ public interface DataView { void toBackMain(List<DataBean.NewslistBean> list); }
item---------
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="wrap_content"> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/image"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:id="@+id/derc"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:id="@+id/title"/> </LinearLayout>
moudle层 DataMoudle
package com.example.com.yuekaolianxi.moudle; import com.example.com.yuekaolianxi.presenter.DataPresenter; /** * Created by linmeihui on 2018/4/4. */ public interface Datamoudle { void getData(String url, DataPresenter presenter); }
MyDataMoudle
package com.example.com.yuekaolianxi.moudle; import com.example.com.yuekaolianxi.bean.DataBean; import com.example.com.yuekaolianxi.presenter.DataPresenter; import com.example.com.yuekaolianxi.utils.OkhtttpUtils; import com.google.gson.Gson; import java.io.IOException; import java.util.List; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; /** * Created by linmeihui on 2018/4/4. */ public class MyDatamoudle implements Datamoudle{ @Override public void getData(String url, final DataPresenter presenter) { OkhtttpUtils.doGet(url, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String string = response.body().string(); Gson gson = new Gson(); DataBean dataBean = gson.fromJson(string, DataBean.class); List<DataBean.NewslistBean> list=dataBean.getNewslist(); presenter.success(list); } }); } }
presenter层DataPresenter
package com.example.com.yuekaolianxi.presenter; import com.example.com.yuekaolianxi.bean.DataBean; import java.util.List; /** * Created by linmeihui on 2018/4/4. */ public interface DataPresenter { void success(List<DataBean.NewslistBean> list); void error(); }
MyDataPresenter
package com.example.com.yuekaolianxi.presenter; import com.example.com.yuekaolianxi.bean.DataBean; import com.example.com.yuekaolianxi.moudle.MyDatamoudle; import com.example.com.yuekaolianxi.view.DataView; import java.util.List; /** * Created by linmeihui on 2018/4/4. */ public class MyDataPresenter implements DataPresenter { DataView dataView; MyDatamoudle datamoudle; public MyDataPresenter (DataView dataView){ this.dataView=dataView; datamoudle=new MyDatamoudle(); } public void getDataList(String url){ datamoudle.getData(url,this); } @Override public void success(List<DataBean.NewslistBean> list) { dataView.toBackMain(list); } @Override public void error() { } }
utils层okhttputils
package com.example.com.yuekaolianxi.utils; import android.os.Environment; import java.io.File; import java.util.Map; import java.util.concurrent.TimeUnit; import okhttp3.Cache; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; /** * Created by Administrator on 2018/3/8. */ public class OkhtttpUtils { //单例模式,把构造方法进行私有化 // private OkhtttpUtils(){}; static OkHttpClient client; public static OkHttpClient getInstance(){ if (client==null) { //更加安全 synchronized (OkhtttpUtils.class) { //缓存的地方 mnt/sdcard File file = new File(Environment.getExternalStorageDirectory(), "cache11"); client = new OkHttpClient().newBuilder() .readTimeout(3000, TimeUnit.SECONDS) //设置读取超时时间 .connectTimeout(3000, TimeUnit.SECONDS) //设置连接的超时时间 .cache(new Cache(file, 10 * 1024)) .build(); } } return client; } /** * get请求 * Callback 是一个接口 */ public static void doGet(String url, Callback callback){ //1:拿到okhttpclient 对像 OkHttpClient client = getInstance(); //2:进行请求的操作 Request request = new Request.Builder() .url(url) .build(); client.newCall(request).enqueue(callback); } //post请求 /** * * @param url 请求的地址 * @param parms 请求的参数 * @param callback callback */ public static void doPost(String url, Map<String,String> parms,Callback callback){ //得到客户端的对像 OkHttpClient client = getInstance(); //不是FormBody,而是一个Builder FormBody.Builder body = new FormBody.Builder(); //key value for (String key:parms.keySet()){ //value的值 body.add(key,parms.get(key)); } Request request = new Request.Builder() .url(url) .post(body.build()) .build(); client.newCall(request).enqueue(callback); } //用来上传图片的 //url , 图片 ,参数 Callback public static void upImage(String url,File file,String filenName,Map<String,String> params,Callback callback){ OkHttpClient client = getInstance(); //requestBody的实现类 Formbody MultipartBody.Builder builder = new MultipartBody.Builder(); if (params!=null){ for (String key :params.keySet()){ builder.addFormDataPart(key,params.get(key)); } } //设置类型 builder.setType(MultipartBody.FORM); builder.addFormDataPart("file",filenName,RequestBody.create(MediaType.parse("application/octet-stream"),file)); // builder.setType(MultipartBody.FORM); // builder.addFormDataPart("file",filenName,RequestBody.create(MediaType.parse("application/octet-stream"),file)); //builder.addFormDataPart("file","aa.png",builder.build()); Request request = new Request.Builder() .url(url) .post(builder.build()) .build(); client.newCall(request).enqueue(callback); } }
utils层 application
package com.example.com.yuekaolianxi.utils; import com.umeng.commonsdk.UMConfigure; import com.umeng.socialize.PlatformConfig; /** * Created by linmeihui on 2018/4/6. */ public class Application extends android.app.Application{ { PlatformConfig.setWeixin("wx967daebe835fbeac","5bb696d9ccd75a38c8a0bfe0675559b3"); PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba"); PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com"); } @Override public void onCreate() { super.onCreate(); UMConfigure.init(this,"5a12384aa40fa3551f0001d1" ,"umeng",UMConfigure.DEVICE_TYPE_PHONE,"");//58edcfeb310c93091c000be2 5965ee00734be40b580001a0 } }
adapter层MyAdapter
package com.example.com.yuekaolianxi.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.example.com.yuekaolianxi.R; import com.example.com.yuekaolianxi.bean.DataBean; import com.example.com.yuekaolianxi.view.MainActivity; import java.util.List; /** * Created by linmeihui on 2018/4/5. */ public class MyAdapter extends RecyclerView.Adapter{ List<DataBean.NewslistBean> list; Context context; OnclickListener listener; public void setOnclick(OnclickListener listener){ this.listener=listener; } public MyAdapter(List<DataBean.NewslistBean> list, Context context) { this.context=context; this.list=list; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view= LayoutInflater.from(context).inflate(R.layout.item,parent,false); ViewHolder viewHolder=new ViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { final ViewHolder viewHolder= (ViewHolder) holder; viewHolder.derc.setText(list.get(position).getDescription()); viewHolder.title.setText(list.get(position).getTitle()); Glide.with(context).load(list.get(position).getPicUrl()).into(viewHolder.image); viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int layoutPosition = viewHolder.getLayoutPosition(); listener.onItemClick(layoutPosition); } }); } @Override public int getItemCount() { return list.size(); } class ViewHolder extends RecyclerView.ViewHolder{ private final ImageView image; private final TextView derc; private final TextView title; public ViewHolder(View itemView) { super(itemView); image= itemView.findViewById(R.id.image); derc = itemView.findViewById(R.id.derc); title = itemView.findViewById(R.id.title); } } public interface OnclickListener{ void onItemClick(int position); } }
bean层DataBean
package com.example.com.yuekaolianxi.bean; import java.util.List; /** * Created by linmeihui on 2018/4/5. */ public class DataBean { /** * code : 200 * msg : success * newslist : [{"ctime":"2017-06-06 16:00","title":"模式思考:为什么星巴克成了印钞机?","description":"创业新闻","picUrl":"http://pic.chinaz.com/thumb/2017/0606/2017060614515724.jpg","url":"http://www.chinaz.com/start/2017/0606/720004.shtml"},{"ctime":"2017-06-06 16:00","title":"佛学文化社群平台,\u201c般若\u201d要连接寺庙、僧人、善信","description":"创业新闻","picUrl":"http://pic.chinaz.com/thumb/2017/0606/6363235766401474079822974.jpeg","url":"http://www.chinaz.com/start/2017/0606/720017.shtml"},{"ctime":"2017-06-06 16:00","title":"短视频不再是东北人的天下 \u201c川军\u201d已崛起","description":"创业新闻","picUrl":"http://pic.chinaz.com/thumb/2017/0606/6363235842103727035736068.png","url":"http://www.chinaz.com/start/2017/0606/720028.shtml"},{"ctime":"2017-06-06 11:00","title":"中国文青创业者的最大金主:远离风口,专注慢公司","description":"创业新闻","picUrl":"http://pic.chinaz.com/thumb/2017/0606/2017060610250221.jpg","url":"http://www.chinaz.com/start/2017/0606/719534.shtml"},{"ctime":"2017-06-06 10:00","title":"给程序员当经纪人,程序员客栈完成300万元天使轮融资","description":"创业新闻","picUrl":"http://pic.chinaz.com/thumb/2017/0606/201706060900398654.jpg","url":"http://www.chinaz.com/start/2017/0606/719406.shtml"},{"ctime":"2017-06-06 10:00","title":"经历多次押宝失败的TOM网,可能要因政策原因而彻底断了挣扎","description":"创业新闻","picUrl":"http://pic.chinaz.com/thumb/2017/0606/6363233672258475907689785.jpeg","url":"http://www.chinaz.com/start/2017/0606/719411.shtml"},{"ctime":"2017-06-05 17:00","title":"网易蜗牛读书:突破付费模式 敲碎纸电隔阂","description":"创业新闻","picUrl":"http://pic.chinaz.com/thumb/2017/0605/201706051550205463.jpg","url":"http://www.chinaz.com/start/2017/0605/718537.shtml"},{"ctime":"2017-06-05 17:00","title":"五年之后,网易新闻为什么彻底放弃了\u201c有态度\u201d?","description":"创业新闻","picUrl":"http://pic.chinaz.com/thumb/2017/0605/201706051600289006.jpg","url":"http://www.chinaz.com/start/2017/0605/718557.shtml"},{"ctime":"2017-06-05 17:00","title":"一年赚了知性女青年7000万元,它却是行业不擅长挣钱的公司","description":"创业新闻","picUrl":"http://pic.chinaz.com/thumb/2017/0605/201706051619455958.jpg","url":"http://www.chinaz.com/start/2017/0605/718595.shtml"},{"ctime":"2017-06-05 15:00","title":"从兴起到洗牌仅用一年!谁让这场全民狂欢戛然而止?","description":"创业新闻","picUrl":"http://pic.chinaz.com/thumb/2017/0605/6363226806028247287344888.jpg","url":"http://www.chinaz.com/start/2017/0605/718364.shtml"}] */ 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 { /** * ctime : 2017-06-06 16:00 * title : 模式思考:为什么星巴克成了印钞机? * description : 创业新闻 * picUrl : http://pic.chinaz.com/thumb/2017/0606/2017060614515724.jpg * url : http://www.chinaz.com/start/2017/0606/720004.shtml */ 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; } } }