求解,钢琴,516432怎么体彩排列516213期

1900海上钢琴师 电影原声大碟_群星
1900海上钢琴师 电影原声大碟 The Legend of 1900
语言: 纯音乐
唱片公司 :新索音乐
发行公司 :新索音乐
发行时间 :
专辑类型 :合辑
专辑简介:
《埃里奥o莫里康内:海上钢琴师 电影原声带》《海上钢琴师》(The Legend of 1900)改编自意大利小说名家亚历山德罗o巴里科的独白剧,讲述一位诞生于海上的音乐奇才,精彩不凡且富争议的一生。他以出生年代1900为名,成长于往返太平洋间,任风浪翻腾的蒸汽船上。天赋秉异的钢琴才华吸引了爵士乐史上普遍公认为“第一位巨匠”的注意,特地前来船上与他较量。而这位从未接触过陆地的钢琴师,更因对爱情与新世界的好奇,离开他原有的世界,去寻求更美的理想……
《1900海上钢琴师 电影原声大碟》的歌曲
1900's Theme 1900 主题曲
The Legend of the Pianist 钢琴师传奇
The Crisis 危机
The Crave 渴望
A Goodbye to Friends 再见,朋友
Study for Three Hands 学习用三只手
Playing Love 演奏爱情
A Mozart Re-Incarnated 莫扎特再生
Child 孩童
1900's Madness #1 疯狂的1900 #1
Danny's Blues 丹尼的布鲁斯
Second Crisis 第二次危机
Peacherine Rag 钢琴曲
Nocturne with no Moon 没有月亮的夜曲
Before the End 结束之前
Playing Love 演奏爱情
I Can and Then 我可以
1900's Madness #2 疯狂的1900 #2
Silent Goodbye 沉默的再见
Ships and Snow 船和雪
Lost Boys Calling 失去的呼唤
推荐、乐评
暂时没有这张专辑的推荐和乐评,等你来
与该专辑有关系的人
暂无专辑关系
同时喜欢这张专辑
商家名称:
请选择商家名称
海岸地音像
冷雨影音店
江苏演艺音像
飞龙图书音像专营
添加新商家
销售链接:
商家名称:
错误原因:
销售链接:
商店名称:
1900海上钢琴师 电影原声大碟
唱片公司: 新索音乐
发行公司: 新索音乐
发行时间:
为该专辑投上票
你目前有 38587 个投票权
恭喜您!投票成功!
分享给好友,为你支持的专辑争取更多票数。
首次分享还可额外获得1个投票权哦~《系统之校长来了》 正文 第337章 钢琴界的无名之辈
请记住我们:【】
虽然刘猛的有钱出乎张琦意料之外,但他仍旧不认为刘猛能够举办好这场演奏会。 新·
“刘猛啊,如果是邀请湖省的钢琴名家,我可以帮你。你在去年青少年钢琴大赛上露了那么一手,不少省内的钢琴名家都是知道你的。可你要邀请全国的钢琴名家来,恐怕有些不太可能呀。”
听到张琦劝说的话语,刘猛一笑,道:“仅靠我的名字当然是不行的,但如果加上‘世界最难的十大钢琴曲’全演奏呢?”
“什么?!”
张琦惊呆了,简直不敢相信自己的耳朵。
虽然听过刘猛演奏越八度版的《野蜂飞舞》,知道刘猛钢琴演奏技艺非凡,但要说刘猛可以将“世界最难的十大钢琴曲”全部演奏出来,张琦还是不敢相信。
因为这不仅是钢琴技巧如何的问题了,更重要的是对这十大最难钢琴曲的领悟和体会。
刘猛也知道自己的话太过让人惊讶,便道:“如果张先生不相信,过几天我可以去江城,将难度排在第一位的拉赫玛尼诺夫的《第三钢琴协奏曲》演奏给张先生听。”
在张琦的震惊中,刘猛挂断了电话。
想要提升作为校长的逼格,并不只是出名就可以,因为名气也是讲质量的。刘猛所学要的,就是那种一看就很高大上的荣誉和名气。
钢琴大师,无疑就是一种可以利用的技能。但仅仅是钢琴大师,并不足以支撑刘猛完成这场注定要轰动整个钢琴界的演奏。
念头进入系统赠送奖励页面,在其他技能中,刘猛找到了自己的目标神级钢琴家!
“当您拥有该赠送技能,将成为一名像神一般被崇拜和传颂的钢琴大家,并注定成为不朽的钢琴传奇!兑换本技能需要1o万积分,请问是否兑换?”
1o万积分,兑换一个神级技能完全是值得的,刘猛直接选择了是。
系统积分从226万变成216万,刘猛瞬间感觉身体以及灵魂之中仿佛多了点什么东西。仔细倾听。仿佛空气流动都具有美妙的音符可以捕捉;十指轻弹,仿佛就敲动了无形的琴键。
这是一种无法言传的美妙感觉。
“神级技能恐怕已经不是单纯的技能了,而是对人的气质、灵魂都有那么一点点影响,让人的本质生某种好的蜕变。”刘猛心有所悟。
这一学期。桃园学校没有进行大扩招,并且上学期现的各方面问题,也都在这学期得到了较为妥善的解决。所以现在桃园学校的运行可以说相当的好,完全不需要刘猛费多少心思。
于是,在开学一个星期后。刘猛就到了江城,给张琦演奏了一拉赫玛尼诺夫的《第三钢琴协奏曲》,让张琦相信了之前他所说的那些话,并彻底拜服。
一番赞叹之后,张琦道:“既然你能将排名第一的难曲演奏如此之好,那么即使后面9曲演奏的一般,也足以让国内钢琴名家来参加你的钢琴演奏会了。”
“你放心,怎么说你都是我们湖省的人,我会动所有关系,联系国内的钢琴名家们。如果可能的话。我还会邀请几位国外的钢琴家来。”
听到这话,刘猛不禁真诚的道:“那就谢谢张主席了。”
这个圈内交流性质的私人钢琴演奏会对刘猛来讲很重要,因为只有征服了那些钢琴名家,得到他们的认可,这些人才会为刘猛说话,为他扬名。
而说直接点,就是刘猛要在这场钢琴大会中,确立自己在钢琴“江湖”中的地位。
张琦作为湖省钢琴协会的主席,负责举办的钢琴大赛、演奏会等不在少数。所以刘猛在于张琦详谈之后,就准备将这场演奏会交给钢琴协会的人代为办理。
举办演奏会所需的资金。刘猛会打在相关财务的卡上。而钢琴协会也会留下各种花费凭证,让刘猛知道自己的钱是怎么花的。当然,钢琴协会的也会收取一定的费用作为工作人员的工钱。
当刘猛回到桃园之后,很快。一个无名之辈将要挑战“世界最难的十大钢琴曲”的消息,就在华国的钢琴界传开了。
中华音乐学院,某间专用于钢琴演奏的大厅中,一位头花白的老者十指在琴键上停下来,震撼人心的乐声却仍在大厅中回荡。当这声音落下,顿时下面响起热烈的掌声。
下面的听众中。除了老者的学生之外,更多的则是慕名而来的其他院系老师、学生。
“真没想到,周老师都6o多岁了,这演奏的技巧竟然仍没有落下一点。这《黄河》听得让人血液沸腾啊!”
“周老师不愧是我国钢琴家中的泰斗,这《黄河》配上他演奏前的那段讲解,我觉得自己在这一类型演奏的理解立马深刻不少。”
“可惜现在一学期听不到几次周老师的演奏,要是能多听几次就好了。”
掌声落下,交谈间大部分人都礼貌的退出去,而前排4个气质不俗的青年男女则是登台到了老者旁边。
“下周在江城有人要挑战‘世界最难的十大钢琴曲’,张琦向我出了邀请,不过我不方便去,你们谁代我走一趟啊。”老者看着几位得意门生道。
“是哪位钢琴名家?挑战的又是哪一钢琴难曲?”最前面一个留着精致短的女子问道。
“演奏者是一个名叫刘猛的年轻人,要挑战的不是哪一,而是全部。”说到这里老者嘴角露出了笑意。
“刘猛?之前根本没听说过呀,该不会是想出名想疯了吧?”立马有一个学生跟着笑起来。
“这样的无名之辈表演,也敢邀请老师您过去,真不知道那张琦怎么想的。”
“就是。”
说话的3个男生都不屑的议论起来,自以为领悟了老者的笑意内涵。只有最前面的那个短女生沉思了会儿,才开口道:“张琦也是钢琴名家,跟老师交情匪浅,应该不是那种不知轻重的人。要不,我就替老师去江城看一看吧。”
老者微笑点点头,道:“那好,就由俞葭去吧。”
某座音乐大厅,一位貌似普通的青年刚结束一场演奏走进后台,立即被埋伏已久的记者们围住了。
“付西,请问你的下一次维也纳音乐厅之行计划出来了吗?”
“付西,请问被《人物》杂志称为将改变世界的2o名青年之一,您有什么感想?”
“付西,你觉得自己和秦云弦相比谁才是我国最出色的青年钢琴家?”
在安保人员的护卫下,好不容易冲破了记者们的围堵,坐进车里,付西的手机就震动了一下。拿出来看了看后,付西不禁露出了沉思的表情。
“琴台音乐厅,挑战全部世界最难的十大钢琴曲?张琦推荐的?”喃喃了一句后,付西就问旁边的女助手,“小黄,下周六我的行程有安排吗?”
女助手翻看了下平板电脑,道:“没有特别安排,应该是休息。”
“那好,改为去江城吧,张琦推荐了一场钢琴独奏会。”
小黄道:“是不是那个挑战世界最难的十大钢琴曲的独奏会啊,我觉得有点像炒作,要不你还是按原计划休息吧?”
“张琦曾经指点过我,就算是别人炒作,看在他的面子上,我要去一趟。再说了,听别人演奏,不是跟休息一样么。”付西微笑道。
小黄也笑了,道:“就怕到时候那人弹得太烂,让你听得烦心。”
“不至于。”
某栋僻静的别墅中,一位长头的俊美青年喝完了一杯酒,起了性质正准备演奏一曲,却忽然收到一条信息。
看完信息之后,这人就呵呵的笑着道:“挑战全部的世界最难十大钢琴曲?就算是我也只是能将其中的四五演奏好而已,一个无名之辈居然想要挑战全部,这不是说要比我强上好几倍么?真是可笑。”
说完,俊美青年便放下手机,坐在钢琴前演奏起来。
如果有懂钢琴曲的人在场,立马就能听得出来,俊美青年演奏的是李斯特《钟》里的一段。这一段虽然是《钟》里面最难的,但在俊美青年的十指下却如同山溪流淌般自然灵动,没有一丝不和谐的地方。
当将这一段弹完之后,俊美青年闭着的眼睛睁开,忽然拿过手机拨通电话道:“胡叔,帮我订一张下周六去江城的机票。”
说完挂掉电话,俊美青年又接着轻松地弹奏起另一曲。曲子节奏欢快,充满激情的律动感,赫然是八度版的《野蜂飞舞》!
张琦作为湖省的钢琴协会主席,本身就是钢琴名家不说,而且人脉相当广。所以,国内绝大部分钢琴名家都收到了他所来的消息。
对于消息的内容,大部分钢琴家都是呵呵一个之前在钢琴界没有一点名气的年青人,要说横空出世,演奏某一世界最难钢琴曲,还能让人相信。可现在却说他要挑战十世界最难钢琴曲,就很难让人相信了。
因为,全世界都没有哪个钢琴家敢说自己能把十最难钢琴曲都演奏好。
所以,呵呵之后钢琴家们的反应就是新人炒作。
虽然这么想,还是有不少钢琴家接受了邀请碍于张琦的面子是一方面,更主要的是,钢琴家们都想看看,这个无名之辈究竟有几斤几两,敢吹这么大的牛皮。
保底第二更到。求订阅。(未完待续。)
请记住我们:【】折腾了好多天,遇到 N 多让人崩溃无语的问题,不过今天终于有些收获了,这是实验的第一版,有些混乱,下一步进行改造细分,先把代码记录在这儿吧。
网上查了很多资料,发现都千篇一律,抄来抄去,很多细节和完整实例都没看到,只有自己一点点研究了,总体感觉 android 下面要显示个图片真不容易啊。
项目主要实现的功能:
异步加载图片图片内存缓存、异步磁盘文件缓存解决使用 viewHolder
后出现的图片错位问题优化列表滚动性能,仅显示可见子项中的图片无需固定图片显示高度,对高度进行缓存使列表滚动时不会因图片高度变化而闪动,使滚动体验
更加流畅图片动画展示效果,新加载的图片显示透明渐变动画
没有涉及到下拉加载和刷新数据,目前还没接触到这些,而且已发现自定义 ListView 中如果有添加 顶部和底部 的拉动加载更多数据提示的
view ,将会导致 ListView 的 child 数量和 position 混乱,所以只有先简单使用 ListView 来做个效果。
核心主要是三个文件:MainActivity.java,
ZAsyncImageLoader.java, DiaryListAdapter.java
下面贴代码:
MainActivity.java
package com.ai9475.
import java.io.F
import java.io.FileOutputS
import java.io.IOE
import java.nio.charset.C
import java.text.DateF
import java.text.SimpleDateF
import java.util.ArrayL
import java.util.D
import java.util.HashM
import java.util.I
import android.content.I
import android.graphics.B
import android.graphics.BitmapF
import android.graphics.drawable.D
import android.net.U
import android.os.B
import android.os.E
import android.os.H
import android.os.L
import android.support.v4.app.FragmentT
import android.support.v7.app.ActionB
import android.support.v7.app.ActionBarA
import android.util.JsonR
import android.util.L
import android.view.M
import android.view.V
import android.widget.AbsListV
import android.widget.AdapterV
import android.widget.ImageV
import android.widget.ListV
import android.widget.SimpleA
import android.widget.TextV
import android.widget.T
import com.ai9475.meitian.adapter.DiaryListA
import com.ai9475.util.ZAsyncImageL
import com.ai9475.util.ZHttpR
import com.ai9475.util.ZL
import com.ai9475.widget.PullToRefreshListV
import org.apache.http.entity.ContentT
import org.apache.http.entity.mime.MultipartEntityB
import org.apache.http.protocol.HTTP;
import org.json.JSONA
import org.json.JSONE
import org.json.JSONO
import org.json.JSONS
import org.w3c.dom.T
public class MainActivity extends ActionBarActivity
&&&&private static final String TAG = "MainActivity";
&&&&private ListView mDiaryListV
&&&&private DiaryListAdapter mDiaryListA
&&&&private ZAsyncImageLoader mAsyncImageL
&&&&private Handler handler = new Handler();
&&&&private int endId = 0;
&&&&private boolean isScrolling = false;
&&&&@Override
&&&&protected void onCreate(Bundle savedInstanceState)
&&&&&&&&Log.d("main activity", "start");
&&&&&&&&super.onCreate(savedInstanceState);
&&&&&&&&this.setContentView(R.layout.activity_main);
&&&&&&&&AppManager.getInstance().addActivity(this);
&&&&&&&&this.mAsyncImageLoader = new ZAsyncImageLoader();
&&&&&&&&this.mAsyncImageLoader.setIsUseDiskCache(true);
&&&&&&&&this.mAsyncImageLoader.setCacheDir(AppConfig.IMAGE_CACHE_PATH);
&&&&&&&&final ActionBar bar = this.getSupportActionBar();
&&&&&&&&bar.setTitle("Bar");
&&&&&&&&bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&bar.addTab(bar.newTab().setText("ATab").setTabListener(new MyTabsListener()));
&&&&&&&&bar.addTab(bar.newTab().setText("BTab").setTabListener(new MyTabsListener()));
&&&&&&&&bar.addTab(bar.newTab().setText("CTab").setTabListener(new MyTabsListener()));
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&this.mDiaryListView = (ListView) findViewById(R.id.diaryListCt);
&&&&&&&&new Thread(){
&&&&&&&&&&&&@Override
&&&&&&&&&&&&public void run() {
&&&&&&&&&&&&&&&&Runnable runnable = new Runnable() {
&&&&&&&&&&&&&&&&&&&&@Override
&&&&&&&&&&&&&&&&&&&&public void run() {
&&&&&&&&&&&&&&&&&&&&&&&&loadDiaryListData();
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&};
&&&&&&&&&&&&&&&&handler.post(runnable);
&&&&&&&&&&&&}
&&&&&&&&}.start();
&&&&&* 日记列表初始化
&&&&protected void initDiaryList(JSONArray diaryList)
&&&&&&&&Log.d("initDiaryList", "start");
&&&&&&&&this.mDiaryListAdapter = new DiaryListAdapter(this, this.mDiaryListView, this.mAsyncImageLoader, diaryList);
&&&&&&&&Log.d("initDiaryList", "setAdapter");
&&&&&&&&this.mDiaryListView.setAdapter(this.mDiaryListAdapter);
&&&&&&&&Log.d("bindListViewEvents", "start");
&&&&&&&&this.bindListViewEvents();
&&&&&&&&Log.d("DiaryListAdapter", "end");
&&&&static int j = 0;
&&&&&* 绑定日记列表事件
&&&&public void bindListViewEvents()
&&&&&&&&this.mDiaryListView.setOnScrollListener(new AbsListView.OnScrollListener(){
&&&&&&&&&&&&@Override
&&&&&&&&&&&&public void onScrollStateChanged(AbsListView absListView, int scrollState)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&switch (scrollState) {
&&&&&&&&&&&&&&&&&&&&case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
&&&&&&&&&&&&&&&&&&&&&&&&ZLog.i(TAG, "OnScrollListener : SCROLL_STATE_TOUCH_SCROLL");
&&&&&&&&&&&&&&&&&&&&&&&&mDiaryListAdapter.setIsSCrolling(true);
&&&&&&&&&&&&&&&&&&&&&&&&break;
&&&&&&&&&&&&&&&&&&&&case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
&&&&&&&&&&&&&&&&&&&&&&&&ZLog.i(TAG, "OnScrollListener : SCROLL_STATE_FLING");
&&&&&&&&&&&&&&&&&&&&&&&&mDiaryListAdapter.setIsSCrolling(true);
&&&&&&&&&&&&&&&&&&&&&&&&break;
&&&&&&&&&&&&&&&&&&&&case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&int first = mDiaryListView.getFirstVisiblePosition();
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&int last = mDiaryListView.getLastVisiblePosition();
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&int onScreenCount = mDiaryListView.getChildCount();
&&&&&&&&&&&&&&&&&&&&&&&&int total = first +
&&&&&&&&&&&&&&&&&&&&&&&&ZLog.i(TAG, "OnScrollListener : SCROLL_STATE_IDLE =& " + (j++) +", first: "+ first +", last: "+ last +", total: "+ total +", onScreenCount:"+ onScreenCount);
&&&&&&&&&&&&&&&&&&&&&&&&mDiaryListAdapter.setIsSCrolling(false);
&&&&&&&&&&&&&&&&&&&&&&&&mDiaryListAdapter.setPositionRange(first, last);
&&&&&&&&&&&&&&&&&&&&&&&&V
&&&&&&&&&&&&&&&&&&&&&&&&int
&&&&&&&&&&&&&&&&&&&&&&&&for (int i = 0; i & onScreenC i++) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&position = first +
&&&&&&&&&&&&&&&&&&&&&&&&&&&&if (mDiaryListAdapter.isInPrevPositionRange(position)) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&ZLog.i(TAG, "inPrevPositionRange position:"+ position);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&continue;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&child = mDiaryListView.getChildAt(i);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&ImageView picPhoto = (ImageView) child.findViewById(R.id.picPhoto);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&ImageView avatar = (ImageView) child.findViewById(R.id.avatar);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&try {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&ZLog.i(TAG, "load image i:"+ first);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&mDiaryListAdapter.loadImage(picPhoto, avatar, mDiaryListAdapter.getItem(position));
&&&&&&&&&&&&&&&&&&&&&&&&&&&&} catch (JSONException e) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&AppException.io(e);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&break;
&&&&&&&&&&&&&&&&&&&&default:
&&&&&&&&&&&&&&&&&&&&&&&&break;
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&&&&&@Override
&&&&&&&&&&&&public void onScroll(AbsListView absListView, int first, int last, int total) {
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&}
&&&&&&&&});
&&&&&&&&ZLog.i(TAG, "diaryListInit : setOnItemClickListener");
&&&&&&&&this.mDiaryListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
&&&&&&&&&&&&@Override
&&&&&&&&&&&&public void onItemClick(AdapterView&!--?--& adapterView, View view, int i, long l) {
&&&&&&&&&&&&&&&&getSupportActionBar().setTitle("点击了: "+ i);
&&&&&&&&&&&&}
&&&&&&&&});
&&&&&&&&ZLog.i("DiaryListAdapter", "setOnRefreshListener");
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&public void loadDiaryListData()
&&&&&&&&ZLog.i(TAG, "loadDiaryListData : start");
&&&&&&&&try {
&&&&&&&&&&&&ZHttpRequest httpRequset = new ZHttpRequest(new ZHttpRequest.OnHttpRequestListener() {
&&&&&&&&&&&&&&&&@Override
&&&&&&&&&&&&&&&&public void onRequest(ZHttpRequest request) {
&&&&&&&&&&&&&&&&&&&&ZLog.i(TAG, "request data : start");
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&@Override
&&&&&&&&&&&&&&&&public void onSucceed(int statusCode, ZHttpRequest request) {
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&ZLog.i(TAG, "request onSucceed : start");
&&&&&&&&&&&&&&&&&&&&try {
&&&&&&&&&&&&&&&&&&&&&&&&String content = request.getInputStream();
&&&&&&&&&&&&&&&&&&&&&&&&if (content == null) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&Toast.makeText(getApplicationContext(), "数据请求失败", Toast.LENGTH_SHORT).show();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&return;
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&JSONArray diaryList = new JSONArray(content);
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&endId = ((JSONObject) diaryList.opt(diaryList.length() - 1)).getInt("id");
&&&&&&&&&&&&&&&&&&&&&&&&initDiaryList(diaryList);
&&&&&&&&&&&&&&&&&&&&} catch (IOException e) {
&&&&&&&&&&&&&&&&&&&&&&&&Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
&&&&&&&&&&&&&&&&&&&&} catch (JSONException e) {
&&&&&&&&&&&&&&&&&&&&&&&&Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&@Override
&&&&&&&&&&&&&&&&public void onFailed(int statusCode, ZHttpRequest request) {
&&&&&&&&&&&&&&&&&&&&ZLog.i(TAG, "request onFailed : code"+ statusCode);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&});
&&&&&&&&&&&&httpRequset.get("" + this.endId);
&&&&&&&&} catch (Exception e) {
&&&&&&&&&&&&e.printStackTrace();
&&&&&&&&&&&&Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
&&&&protected class MyTabsListener implements ActionBar.TabListener
&&&&&&&&@Override
&&&&&&&&public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
&&&&&&&&@Override
&&&&&&&&public void onTabReselected(ActionBar.Tab arg0, FragmentTransaction arg1) {
&&&&&&&&&&&&
&&&&&&&&@Override
&&&&&&&&public void onTabUnselected(ActionBar.Tab arg0, FragmentTransaction arg1) {
&&&&&&&&&&&&
&&&&&* 配置 ActionBar
&&&&&* @param menu
&&&&&* @return
&&&&public boolean onCreateOptionsMenu(Menu menu)
&&&&&&&&this.getMenuInflater().inflate(R.menu.main, menu);
&&&&&&&&return super.onCreateOptionsMenu(menu);
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
其中涉及到 scroll 滚动相关的事件,我一开始在这里折腾了好久,可以去看看我这篇文章:
Android 关于 OnScrollListener 事件顺序次数的简要分析
ZAsyncImageLoader.java
package com.ai9475.
import android.graphics.drawable.D
import android.os.H
import android.os.M
import java.io.DataInputS
import java.io.F
import java.io.FileInputS
import java.io.FileOutputS
import java.io.IOE
import java.io.InputS
import java.lang.ref.SoftR
import java.net.HttpURLC
import java.net.URL;
import java.util.D
import java.util.HashM
import java.util.concurrent.ExecutorS
import java.util.concurrent.E
&* 异步多线程加载图片
&* Created by ZHOUZ on 14-2-7.
public class ZAsyncImageLoader
&&&&private static final String TAG = "ZAsyncImageLoader";
&&&&&* 线程池中的线程数量
&&&&private int mThreadSize = 5;
&&&&&* 是否使用 SD 卡缓存图片
&&&&private boolean mIsUseDiskCache = false;
&&&&&* SD 卡上缓存的图片有效期(单位:秒)
&&&&private int mExpireTime = 86400;
&&&&&* 图片缓存文件目录
&&&&private String mCachePath = null;
&&&&&* 同步缓存已加载过的图片,使用软引用优化内存
&&&&private HashMap&string, softreference&drawable=""&& mImageCaches = new HashMap&string, softreference&drawable=""&&();
&&&&&* 使用线程池,根据 CPU 数量来动态决定可用线程数量
&&&&private ExecutorService mExecutorService = null;
&&&&&* 设置 SD 卡中的图片缓存有效时长(单位:秒)
&&&&&* @param time
&&&&public void setExpireTime(int time) {
&&&&&&&&this.mExpireTime =
&&&&&* 设置线程数量
&&&&&* @param size
&&&&public void setThreadSize(int size) {
&&&&&&&&this.mThreadSize =
&&&&&* 设置是否使用 SD 卡缓存图片
&&&&&* @param isUse
&&&&public void setIsUseDiskCache(Boolean isUse) {
&&&&&&&&this.mIsUseDiskCache = isU
&&&&&* 设置缓存目录
&&&&&* @param path
&&&&public void setCacheDir(String path) {
&&&&&&&&this.mCachePath =
&&&&&* 获取线程池管理器
&&&&&* @return
&&&&public ExecutorService getExecutorService() {
&&&&&&&&if (this.mExecutorService == null) {
&&&&&&&&&&&&if (this.mThreadSize & 1) {
&&&&&&&&&&&&&&&&this.mThreadSize = Runtime.getRuntime().availableProcessors() * 5;
&&&&&&&&&&&&}
&&&&&&&&&&&&this.mExecutorService = Executors.newFixedThreadPool(this.mThreadSize);
&&&&&&&&return this.mExecutorS
&&&&&* 加载图片的多线程控制
&&&&&* @param imageUrl
&&&&&* @param tag
&&&&&* @param listener
&&&&public Drawable loadDrawable(final String imageUrl, final String tag, final OnImageLoadListener listener)
&&&&&&&&if (this.mImageCaches.containsKey(imageUrl)) {
&&&&&&&&&&&&SoftReference&drawable& softReference = this.mImageCaches.get(imageUrl);
&&&&&&&&&&&&if (softReference != null) {
&&&&&&&&&&&&&&&&Drawable drawable = softReference.get();
&&&&&&&&&&&&&&&&if (drawable != null) {
&&&&&&&&&&&&&&&&&&&&return
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&final Handler handler = new Handler() {
&&&&&&&&&&&&@Override
&&&&&&&&&&&&public void handleMessage(Message message) {
&&&&&&&&&&&&&&&&if (message.what == 1) {
&&&&&&&&&&&&&&&&&&&&listener.onLoaded((Drawable) message.obj, imageUrl, tag);
&&&&&&&&&&&&&&&&} else {
&&&&&&&&&&&&&&&&&&&&listener.onFailed((IOException) message.obj, imageUrl, tag);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&};
&&&&&&&&this.getExecutorService().submit(new Runnable() {
&&&&&&&&&&&&@Override
&&&&&&&&&&&&public void run() {
&&&&&&&&&&&&&&&&M
&&&&&&&&&&&&&&&&try {
&&&&&&&&&&&&&&&&&&&&Drawable drawable = loadImageFromUrl(imageUrl);
&&&&&&&&&&&&&&&&&&&&mImageCaches.put(imageUrl, new SoftReference&drawable&(drawable));
&&&&&&&&&&&&&&&&&&&&msg = handler.obtainMessage(1, drawable);
&&&&&&&&&&&&&&&&} catch (IOException e) {
&&&&&&&&&&&&&&&&&&&&msg = handler.obtainMessage(0, e);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&handler.sendMessage(msg);
&&&&&&&&&&&&}
&&&&&&&&});
&&&&&&&&return null;
&&&&&* 加载远程图片或本地图片缓存文件
&&&&&* @param imageUrl
&&&&&* @return
&&&&&* @throws IOException
&&&&public Drawable loadImageFromUrl(String imageUrl) throws IOException
&&&&&&&&if (mIsUseDiskCache && mCachePath != null)
&&&&&&&&&&&&File d = new File(mCachePath);
&&&&&&&&&&&&if (! d.exists()) {
&&&&&&&&&&&&&&&&d.mkdirs();
&&&&&&&&&&&&}
&&&&&&&&&&&&final File f = new File(mCachePath + ZHelper.md5(imageUrl));
&&&&&&&&&&&&long time = (new Date()).getTime();
&&&&&&&&&&&&long expire = time - (mExpireTime * 1000L);
&&&&&&&&&&&&
&&&&&&&&&&&&if (f.exists() && f.lastModified() & expire) {
&&&&&&&&&&&&&&&&FileInputStream fis = new FileInputStream(f);
&&&&&&&&&&&&&&&&return Drawable.createFromStream(fis, "src");
&&&&&&&&&&&&}
&&&&&&&&&&&&
&&&&&&&&&&&&InputStream i = this.getImageInputStream(imageUrl);
&&&&&&&&&&&&if (i == null) {
&&&&&&&&&&&&&&&&return null;
&&&&&&&&&&&&}
&&&&&&&&&&&&final Drawable drawable = Drawable.createFromStream(i, "src");
&&&&&&&&&&&&
&&&&&&&&&&&&new Thread(new Runnable() {
&&&&&&&&&&&&&&&&@Override
&&&&&&&&&&&&&&&&public void run() {
&&&&&&&&&&&&&&&&&&&&try {
&&&&&&&&&&&&&&&&&&&&&&&&InputStream i = ZFormat.drawable2InputStream(drawable);
&&&&&&&&&&&&&&&&&&&&&&&&DataInputStream in = new DataInputStream(i);
&&&&&&&&&&&&&&&&&&&&&&&&FileOutputStream out = new FileOutputStream(f);
&&&&&&&&&&&&&&&&&&&&&&&&byte[] buffer = new byte[1024];
&&&&&&&&&&&&&&&&&&&&&&&&int byteR
&&&&&&&&&&&&&&&&&&&&&&&&while ((byteRead = in.read(buffer)) != -1) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&out.write(buffer, 0, byteRead);
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&in.close();
&&&&&&&&&&&&&&&&&&&&&&&&out.close();
&&&&&&&&&&&&&&&&&&&&} catch (IOException e) {
&&&&&&&&&&&&&&&&&&&&&&&&ZLog.d("write image cache IOException", e.getMessage());
&&&&&&&&&&&&&&&&&&&&&&&&e.printStackTrace();
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}).start();
&&&&&&&&&&&&return
&&&&&&&&else {
&&&&&&&&&&&&InputStream i = this.getImageInputStream(imageUrl);
&&&&&&&&&&&&return Drawable.createFromStream(i, "src");
&&&&&* 远程加载图片数据
&&&&&* @param imageUrl
&&&&&* @return
&&&&&* @throws IOException
&&&&public InputStream getImageInputStream(String imageUrl) throws IOException
&&&&&&&&URL m = new URL(imageUrl);
&&&&&&&&HttpURLConnection conn = (HttpURLConnection) m.openConnection();
&&&&&&&&conn.setRequestMethod("GET");
&&&&&&&&conn.setUseCaches(false);
&&&&&&&&conn.setDoInput(true);
&&&&&&&&conn.setConnectTimeout(5000);
&&&&&&&&conn.setReadTimeout(30000);
&&&&&&&&conn.setInstanceFollowRedirects(true);
&&&&&&&&return conn.getInputStream();
&&&&&* 加载图片的事件监听器
&&&&public interface OnImageLoadListener {
&&&&&&&&/**
&&&&&&&&&* 图片加载完成事件处理
&&&&&&&&&*
&&&&&&&&&* @param imageDrawable
&&&&&&&&&* @param imageUrl
&&&&&&&&&* @param tag
&&&&&&&&&*/
&&&&&&&&public void onLoaded(Drawable imageDrawable, String imageUrl, String tag);
&&&&&&&&/**
&&&&&&&&&* 图片加载失败的事件处理
&&&&&&&&&*
&&&&&&&&&* @param e
&&&&&&&&&* @param imageUrl
&&&&&&&&&* @param tag
&&&&&&&&&*/
&&&&&&&&public void onFailed(IOException e, String imageUrl, String tag);
&&&&protected void finalize()
&&&&&&&&this.mExecutorService.shutdown();
&/drawable&&/drawable&&/string,&&/string,&
DiaryListAdapter.java
package com.ai9475.meitian.
import android.content.C
import android.graphics.drawable.D
import android.util.L
import android.view.LayoutI
import android.view.V
import android.view.ViewG
import android.view.animation.AlphaA
import android.widget.AbsListV
import android.widget.BaseA
import android.widget.ImageV
import android.widget.ListV
import android.widget.RelativeL
import android.widget.TextV
import android.widget.T
import com.ai9475.meitian.R;
import com.ai9475.util.ZAsyncImageL
import com.ai9475.util.ZH
import com.ai9475.util.ZL
import com.ai9475.util.ZUI;
import org.json.JSONA
import org.json.JSONE
import org.json.JSONO
import java.io.IOE
import java.util.ArrayL
import java.util.HashM
import java.util.M
&* Created by ZHOUZ on 14-2-8.
public class DiaryListAdapter extends BaseAdapter implements AbsListView.RecyclerListener
&&&&private static final String TAG = "DiaryListAdapter";
&&&&private Context mC
&&&&private ListView mDiaryListV
&&&&public View mConvertV
&&&&private ZAsyncImageLoader mAsyncImageL
&&&&private JSONArray mDiaryDataList = null;
&&&&private boolean mIsScrolling = false;
&&&&private int mFirstPosition = 0;
&&&&private int mLastPosition = 0;
&&&&private int mPrevFirstPosition = 0;
&&&&private int mPrevLastPosition = 0;
&&&&private HashMap&string, integer=""& mImagesHeight = new HashMap&string, integer=""&();
&&&&public DiaryListAdapter(Context context, ListView listView, ZAsyncImageLoader imageLoader, JSONArray diaryList)
&&&&&&&&this.mContext =
&&&&&&&&this.mAsyncImageLoader = imageL
&&&&&&&&this.mDiaryDataList = diaryL
&&&&&&&&this.mDiaryListView = listV
&&&&public void setIsSCrolling(boolean flag)
&&&&&&&&this.mIsScrolling =
&&&&&* 当前列表加载到的日记总数
&&&&&* @return
&&&&public int getCount() {
&&&&&&&&return this.mDiaryDataList == null ? 0 : this.mDiaryDataList.length();
&&&&&* 可见单元位置对比是否处在在上次滚动可是范围内
&&&&&* @param position
&&&&&* @return
&&&&public boolean isInPrevPositionRange(int position) {
&&&&&&&&if (this.mPrevLastPosition == 0) return false;
&&&&&&&&return (position &= this.mPrevFirstPosition && position &= this.mPrevLastPosition) ? true : false;
&&&&&* 设置滚动后可见的起止项目序号
&&&&&* @param first
&&&&&* @param last
&&&&public void setPositionRange(int first, int last) {
&&&&&&&&this.mPrevFirstPosition = this.mFirstP
&&&&&&&&this.mPrevLastPosition = this.mLastP
&&&&&&&&this.mFirstPosition =
&&&&&&&&this.mLastPosition =
&&&&&&&&ZLog.i(TAG, "setPositionLimit prevFirst: "+ mPrevFirstPosition +", prevLast: "+ mPrevLastPosition +", first: "+ mFirstPosition +", last: "+ mLastPosition);
&&&&&* 获取当前列表单元的日记id
&&&&&* @param position
&&&&&* @return
&&&&public long getItemId(int position) {
&&&&&&&&int id = 0;
&&&&&&&&try {
&&&&&&&&&&&&id = this.getItem(position).getInt("id");
&&&&&&&&} catch (JSONException e) {
&&&&&&&&&&&&Toast.makeText(this.mContext, e.getMessage(), Toast.LENGTH_LONG);
&&&&&&&&return
&&&&&* 获取一条数据
&&&&&* @param position
&&&&&* @return
&&&&public JSONObject getItem(int position) {
&&&&&&&&return (JSONObject) this.mDiaryDataList.opt(position);
&&&&&* 获取视图
&&&&&* @param position
&&&&&* @param convertView
&&&&&* @param parent
&&&&&* @return
&&&&public View getView(int position, View convertView, ViewGroup parent)
&&&&&&&&ZLog.v(TAG, "getView i: " + position);
&&&&&&&&final ViewH
&&&&&&&&if (convertView == null) {
&&&&&&&&&&&&convertView = LayoutInflater.from(this.mContext).inflate(R.layout.list_item_diary, null);
&&&&&&&&&&&&this.mConvertView = convertV
&&&&&&&&&&&&holder = new ViewHolder(convertView);
&&&&&&&&&&&&convertView.setTag(holder);
&&&&&&&&} else {
&&&&&&&&&&&&holder = (ViewHolder) convertView.getTag();
&&&&&&&&try {
&&&&&&&&&&&&
&&&&&&&&&&&&JSONObject item = this.getItem(position);
&&&&&&&&&&&&ZLog.i(TAG, "getView i: "+ position +", isScrolling: "+ mIsScrolling +", mFirstPosition: "+ mFirstPosition +", mLastPosition: "+ mLastPosition);
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&ZLog.i(TAG, "getView i: "+ position +", can't show images");
&&&&&&&&&&&&
&&&&&&&&&&&&if (this.mLastPosition == 0) {
&&&&&&&&&&&&&&&&this.loadImage(holder.picPhoto, holder.avatar, item);
&&&&&&&&&&&&&&&&this.mPrevLastPosition =
&&&&&&&&&&&&} else {
&&&&&&&&&&&&&&&&this.setDefaultImage(holder.picPhoto, holder.avatar, item);
&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&holder.nickname.setText(item.getString("nickname") +":"+ position);
&&&&&&&&&&&&holder.content.setText(item.getString("content"));
&&&&&&&&&&&&holder.calendarMonth.setText(ZHelper.dateFormat("MM月", item.getInt("calendarDate")));
&&&&&&&&&&&&holder.calendarDay.setText(ZHelper.dateFormat("dd", item.getInt("calendarDate")));
&&&&&&&&} catch (JSONException e) {
&&&&&&&&&&&&Toast.makeText(this.mContext, e.getMessage(), Toast.LENGTH_LONG);
&&&&&&&&return convertV
&&&&public void setDefaultImage(ImageView picPhoto, ImageView avatar, JSONObject item) throws JSONException
&&&&&&&&int height = 0;
&&&&&&&&String picUrl = getPicUrl(item.getString("picUrl"));
&&&&&&&&if (mImagesHeight.containsKey(picUrl)) {
&&&&&&&&&&&&height = mImagesHeight.get(picUrl);
&&&&&&&&int minHeight = ZUI.dp2px(this.mContext, 100);
&&&&&&&&if (height & minHeight) height = minH
&&&&&&&&picPhoto.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, height));
&&&&&&&&picPhoto.setScaleType(ImageView.ScaleType.CENTER);
&&&&&&&&picPhoto.setImageResource(R.drawable.default_pic);
&&&&&&&&avatar.setScaleType(ImageView.ScaleType.CENTER);
&&&&&&&&avatar.setImageResource(R.drawable.default_avatar);
&&&&public String getPicUrl(String pic)
&&&&&&&&return "" +
&&&&public String getAvatarUrl(String avatar)
&&&&&&&&return "" +
&&&&&* 加载可见单元的图片
&&&&&* @param picPhoto
&&&&&* @param avatar
&&&&&* @param item
&&&&&* @throws JSONException
&&&&public void loadImage(ImageView picPhoto, ImageView avatar, JSONObject item) throws JSONException
&&&&&&&&String picUrl = getPicUrl(item.getString("picUrl"));
&&&&&&&&String avatarUrl = getAvatarUrl(item.getString("avatar"));
&&&&&&&&String picTag = "pic"+ item.getInt("calendarDate") + item.getInt("id");
&&&&&&&&String avatarTag = "avatar"+ item.getInt("id");
&&&&&&&&picPhoto.setTag(picTag);
&&&&&&&&avatar.setTag(avatarTag);
&&&&&&&&OnPicLoadListener mOnPicLoadListener = new OnPicLoadListener();
&&&&&&&&OnAvatarLoadListener mOnAvatarLoadListener = new OnAvatarLoadListener();
&&&&&&&&Drawable picDrawable = this.mAsyncImageLoader.loadDrawable(picUrl, picTag, mOnPicLoadListener);
&&&&&&&&mOnPicLoadListener.setDrawable(picPhoto, picUrl, picTag, picDrawable);
&&&&&&&&Drawable avatarDrawable = this.mAsyncImageLoader.loadDrawable(avatarUrl, avatarTag, mOnAvatarLoadListener);
&&&&&&&&mOnAvatarLoadListener.setDrawable(avatar, avatarUrl, avatarTag, avatarDrawable);
&&&&&* 当列表单元滚动到可是区域外时清除掉已记录的图片视图
&&&&&* @param view
&&&&@Override
&&&&public void onMovedToScrapHeap(View view) {
&&&&private static class ViewHolder
&&&&&&&&public ImageView picP
&&&&&&&&public ImageV
&&&&&&&&public TextV
&&&&&&&&public TextV
&&&&&&&&public TextView calendarM
&&&&&&&&public TextView calendarD
&&&&&&&&public ViewHolder(View view)
&&&&&&&&&&&&this.picPhoto = (ImageView) view.findViewById(R.id.picPhoto);
&&&&&&&&&&&&this.avatar = (ImageView) view.findViewById(R.id.avatar);
&&&&&&&&&&&&this.nickname = (TextView) view.findViewById(R.id.nickname);
&&&&&&&&&&&&this.content = (TextView) view.findViewById(R.id.content);
&&&&&&&&&&&&this.calendarMonth = (TextView) view.findViewById(R.id.calendarMonth);
&&&&&&&&&&&&this.calendarDay = (TextView) view.findViewById(R.id.calendarDay);
&&&&&* 头像图片加载事件监听
&&&&private class OnAvatarLoadListener extends OnImageLoadListener
&&&&&&&&private int mImageSource = R.drawable.default_
&&&&&&&&/**
&&&&&&&&&* 设置图片
&&&&&&&&&*
&&&&&&&&&* @param view
&&&&&&&&&* @param imageUrl
&&&&&&&&&* @param tag
&&&&&&&&&* @param drawable
&&&&&&&&&*/
&&&&&&&&public void setDrawable(ImageView view, String imageUrl, String tag, Drawable drawable)
&&&&&&&&&&&&if (view == null) return;
&&&&&&&&&&&&if (drawable != null) {
&&&&&&&&&&&&&&&&view.setScaleType(ImageView.ScaleType.CENTER_CROP);
&&&&&&&&&&&&&&&&view.setImageDrawable(drawable);
&&&&&&&&&&&&} else {
&&&&&&&&&&&&&&&&view.setScaleType(ImageView.ScaleType.CENTER);
&&&&&&&&&&&&&&&&view.setImageResource(this.mImageSource);
&&&&&&&&&&&&}
&&&&&* 日记照片加载事件监听
&&&&private class OnPicLoadListener extends OnImageLoadListener
&&&&&&&&private int mImageSource = R.drawable.default_
&&&&&&&&/**
&&&&&&&&&* 设置图片
&&&&&&&&&*
&&&&&&&&&* @param view
&&&&&&&&&* @param imageUrl
&&&&&&&&&* @param tag
&&&&&&&&&* @param drawable
&&&&&&&&&*/
&&&&&&&&public void setDrawable(ImageView view, String imageUrl, String tag, Drawable drawable)
&&&&&&&&&&&&if (view == null) return;
&&&&&&&&&&&&int height = 0;
&&&&&&&&&&&&if (mImagesHeight.containsKey(imageUrl)) {
&&&&&&&&&&&&&&&&height = mImagesHeight.get(imageUrl);
&&&&&&&&&&&&}
&&&&&&&&&&&&if (drawable != null) {
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&if (height == 0) {
&&&&&&&&&&&&&&&&&&&&int minHeight = ZUI.dp2px(mContext, 100);
&&&&&&&&&&&&&&&&&&&&int maxHeight = ZUI.dp2px(mContext, 300);
&&&&&&&&&&&&&&&&&&&&height = (int) ((float) view.getWidth() / drawable.getMinimumWidth() * drawable.getMinimumHeight());
&&&&&&&&&&&&&&&&&&&&if (height & maxHeight) {
&&&&&&&&&&&&&&&&&&&&&&&&height = maxH
&&&&&&&&&&&&&&&&&&&&} else if (height & minHeight) {
&&&&&&&&&&&&&&&&&&&&&&&&height = minH
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&mImagesHeight.put(imageUrl, height);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&drawable.setAlpha(0);
&&&&&&&&&&&&&&&&view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, height));
&&&&&&&&&&&&&&&&view.setScaleType(ImageView.ScaleType.CENTER_CROP);
&&&&&&&&&&&&&&&&view.setImageDrawable(drawable);
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&AlphaAnimation alphaAnim = new AlphaAnimation(0.0f, 1.0f);
&&&&&&&&&&&&&&&&alphaAnim.setDuration(1000);
&&&&&&&&&&&&&&&&view.setAnimation(alphaAnim);
&&&&&&&&&&&&} else {
&&&&&&&&&&&&&&&&int minHeight = ZUI.dp2px(mContext, 100);
&&&&&&&&&&&&&&&&height = height & minHeight ? minHeight :
&&&&&&&&&&&&&&&&view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, height));
&&&&&&&&&&&&&&&&view.setScaleType(ImageView.ScaleType.CENTER);
&&&&&&&&&&&&&&&&view.setImageResource(mImageSource);
&&&&&&&&&&&&}
&&&&&* 图片的加载监听事件
&&&&abstract private class OnImageLoadListener implements ZAsyncImageLoader.OnImageLoadListener
&&&&&&&&/**
&&&&&&&&&* 实现图片显示的抽象方法
&&&&&&&&&*
&&&&&&&&&* @param view
&&&&&&&&&* @param tag
&&&&&&&&&* @param drawable
&&&&&&&&&*/
&&&&&&&&abstract public void setDrawable(ImageView view, String imageUrl, String tag, Drawable drawable);
&&&&&&&&@Override
&&&&&&&&public void onLoaded(Drawable drawable, String imageUrl, String tag) {
&&&&&&&&&&&&ImageView view = (ImageView) mDiaryListView.findViewWithTag(tag == null ? imageUrl : tag);
&&&&&&&&&&&&this.setDrawable(view, imageUrl, tag, drawable);
&&&&&&&&@Override
&&&&&&&&public void onFailed(IOException e, String imageUrl, String tag) {
&&&&&&&&&&&&
}&/string,&&/string,&
代码相关的一些类方法,以及涉及到的其他方面问题的相关博文:
android 一些数据转换方法
Android实现图片宽度100%ImageView宽度且高度按比例自动伸缩
源码:/QpzhBEWCw3gDH
项目中需要修改服务端的地址,我在压缩包中附有一些 服务端发送的 JSON 数据
还可以加入
文件共享群,这里全是 Android 和
JAVA 学习资料和教程:http://qun./
阅读(...) 评论()

我要回帖

更多关于 钢琴练习曲难度排列 的文章

 

随机推荐